Ember.js вычисляемая недвижимость из магазина

Я пытаюсь получить простое число объектов, возвращаемых запросом REST get с сервера для использования в другом контроллере в Ember.js

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

Он возвращает PromiseArray, поэтому я использую .then() чтобы получить доступ к свойствам.

App.TestController = Ember.ObjectController.extend({
    totalCount: function() {
        return this.store.find('question', {test: this.get('id')}).then(function(items) {
            var count = items.get('content').get('length');
            console.log(count); // This actually logs correct values
            return count;
        })
    }.property('question')
})

Он делает то, что предполагает, и я получаю правильные значения, напечатанные в console.log(), но когда я пытаюсь использовать {{totalCount}} в представлении шаблона я получаю [object Object] вместо целого числа.

Кроме того, я правильно наблюдаю questions имущество? если значение изменится в соответствующем контроллере, обновится ли значение?

Спасибо

2 ответа

Проблема, которую вы видите, заключается в том, что вы возвращаете обещание в качестве стоимости имущества, и руль не оценит это обещание для вас. Что вам нужно сделать, это создать отдельную функцию, которая наблюдает question а затем позвоните в ваш магазин, чтобы обновить свойство totalCount. Это было бы что-то вроде этого.

App.TestController = Ember.ObjectController.extend({
    totalCount: 0,
    totalCountUpdate: function() {
        var that = this;
        this.store.find('question', {test: this.get('id')}).then(function(items)     {
            var count = items.get('content').get('length');
            console.log(count);
            that.set('totalCount', count);
        })
    }.observes('question')
})

Альтернативно totalCount может лениво настроить себя так:

App.TestController = Ember.ObjectController.extend({
    totalCount: 0,
    question: // evaluate to something,
    totalCount: function() {
        var that = this;
        that.store.find('question', {test: that.get('id')}).then(function(items)     {
            var count = items.get('content').get('length');
            that.set('totalCount', count);
        })
    }.observes('question').property()
})
Другие вопросы по тегам