我正在路由中提取JSON数据,如下所示:
App.CollectionRoute = Ember.Route.extend({
setupController: function(controller, model){
$.getJSON('../returnitems.json', function(data){
controller.set('returnItems', data);
})
}
});
这给了我一个对象,我可以在我的模板中迭代:
{{#each destination in controller.returnItems}}
现在我想通过控制器删除一些代码:
this.get('controllers.collection').get('returnItems')[returnIndex].set('hasItems', false);
出现以下错误:
Uncaught TypeError: Object #<Object> has no method 'set'
但是当我使用时: this.get('controllers.collection')。get('returnItems')[returnIndex] .hasItems = false
它告诉我使用get和set?!
答案 0 :(得分:1)
您不应该在setupController
挂钩中进行AJAX调用。您应该使用model
和afterModel
挂钩,以便Ember在完全转换到路径之前等待承诺成功。
现在,您无法调用set
方法,因为$.getJSON
会返回一个普通的旧Javascript对象数组,而不是您期望的Ember.Object
数组。
相反,你会做这样的事情:
App.CollectionRoute = Ember.Route.extend({
afterModel: function(controller, model) {
var self = this;
return $.getJSON('../returnitems.json', function(data_items){
var items = [];
for (var i = 0; i < data_items.length; i++) {
items.push(Ember.Object.create(data_items[i]));
}
self.set('returnItems', items);
});
},
setupController: function (controller, model) {
controller.set('returnItems', this.get('returnItems'));
}
});
然后你就可以:
this.get('controllers.collection').get('returnItems').objectAt(returnIndex).set('hasItems', false);
我希望这可以帮到你!
答案 1 :(得分:0)
尝试使用
this.get('controllers.collection').get('returnItems').objectAt(returnIndex).set('hasItems', false);
请参阅:http://emberjs.com/api/classes/Ember.Array.html#method_objectAt