在Ember.js ArrayController
中查找项目的正确方法是什么?我在控制器中有一组联系人:
App.contactsController = Em.ArrayController.create({
content:[],
});
控制器中有对象,它们会显示出来并且一切正常。然后,我想实现具有序列化/反序列化的路由器:
...
deserialize:function (router, params) {
var contact = App.contactsController.find(function(item) {
return item.id == params.contact_id;
});
},
...
但是,find函数似乎没有进行任何迭代。可能是什么原因?路由器是否可能在应用程序调用其ready
方法之前尝试进行路由?这就是我用控制器填充数据的地方。
Ember.Application.ready
方法中)。在正确设置数据后是否可以“延迟”路由?
答案 0 :(得分:0)
var contact = App.contactsController.filter(function(item) {
return item.id == params.contact_id;
});
我认为你可以在设置路由器时运行Application.initialize()。您可以使用观察者来检测数据集。
dataChanged: function() {
console.log(this.get('content.length'));
// before emberjs 1.0pre
// console.log(this.getPath('content.length'));
}.observes('content')
答案 1 :(得分:0)
问题实际上是由路由器进行反序列化后insertind数据引入arrayController引起的。把它放在App.initialize()之前解决了这个问题。
答案 2 :(得分:0)
正确的答案是:
var contact = App.contactsController.content.find(function(item) {
return item.id == params.contact_id;
});
如果您没有指向内容数组,它将不会返回项目。