Пользовательский компонент автозаполнения Ember Cli не работает

Я не уверен, почему возврат не передается в шаблон компонента. Он слушает, и значение найдено, но не работает.

вернуть результат.ресурсы; не возвращает данные, когда в result.resoures есть массив объектов.

вот шаблон автозаполнения auto-complete.hbs

    <ul>
        <li class='row input-group-lg'>
            {{input type="text" value=searchText placeholder="Enter Street Address" class='col-md-6 col-md-offset-3 col-xs-12 street-address'}}
        </li>


    </ul>
    <ul>
        {{#each searchResults}}
            <li>{{this.name}}</li>
        {{/each}}
    </ul> 

вот автозаполнение.js

import Ember from 'ember';

export default Ember.Component.extend({
        searchText: null,

        searchResults: function() {
            var searchText = this.get('searchText');
            if(!searchText) {
                return;
            }
            Ember.$.ajax({
                url: "http://dev.virtualearth.net/REST/v1/Locations",
                dataType: "jsonp",
                data: {
                    key: "",
                    q: searchText
                },
                jsonp: "jsonp"
            }).then(function(data) {
                var result = data.resourceSets[0];
                if (result) {
                    if (result.estimatedTotal > 0) {
                        return result.resources;
                    }
                }
            });
        }.property('searchText')
});

person user3813559    schedule 18.09.2014    source источник


Ответы (1)


Блок кода

.then(function(data) {
            var result = data.resourceSets[0];
            if (result) {
                if (result.estimatedTotal > 0) {
                    return result.resources;
                }
            }

вернется из promise и не вернет значение для вычисляемого свойства, что, очевидно, означает, что вы ничего не возвращаете для CP.

Возможный обходной путь может быть

searchResults: function() {
        var searchText = this.get('searchText');
        var searchResults = Ember.ArrayProxy.create();
        if(!searchText) {
            return;
        }
        Ember.$.ajax({
            url: "http://dev.virtualearth.net/REST/v1/Locations",
            dataType: "jsonp",
            data: {
                key: "",
                q: searchText
            },
            jsonp: "jsonp"
        }).then(function(data) {
            var result = data.resourceSets[0];
            if (result) {
                if (result.estimatedTotal > 0) {
                    searchResults.set('content',result.resources);
                }
            }
        });
        return searchResults;
    }.property('searchText')

Вы можете создать прокси-сервер массива и вернуть прокси-сервер массива для CP. По завершении обещания установите результат в качестве содержимого для прокси-сервера массива, который обновит шаблон.

person Hyder    schedule 18.09.2014