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()
})