Ember.js 在Ember ArrayController中查找项目

Ember.js 在Ember ArrayController中查找项目,ember.js,controller,enumerable,ember-old-router,Ember.js,Controller,Enumerable,Ember Old Router,在Ember.js ArrayController中查找项的正确方法是什么?我在控制器中有一组联系人: App.contactsController = Em.ArrayController.create({ content:[], }); 控制器中有对象,它们被显示,一切正常。然后,我想用序列化/反序列化实现路由器: ... deserialize:function (router, params) { var contact = App.contactsController

在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函数似乎没有进行任何迭代。原因可能是什么?路由器是否可能在应用程序调用其就绪方法之前尝试进行路由?这就是我用数据填充控制器的地方

编辑:嗯,我发现路由器试图在我用Ember.Application.ready方法中的数据填充arrayController之前进行转换。数据正确设置后是否可能延迟路由

var contact = App.contactsController.filter(function(item) {
    return item.id == params.contact_id;
});
我想你们可以在路由器设置好后运行Application.initialize。您可以使用observer来检测数据集

dataChanged: function() {
    console.log(this.get('content.length'));
    // before emberjs 1.0pre
    // console.log(this.getPath('content.length')); 
}.observes('content')
我想你们可以在路由器设置好后运行Application.initialize。您可以使用observer来检测数据集

dataChanged: function() {
    console.log(this.get('content.length'));
    // before emberjs 1.0pre
    // console.log(this.getPath('content.length')); 
}.observes('content')

这个问题实际上是由路由器进行反序列化后将插入数据插入arrayController引起的。将其放在App.initialize之前解决了问题。

问题实际上是由路由器进行反序列化后将插入数据插入arrayController引起的。将其放在App.initialize之前解决了问题。

正确答案是:

var contact = App.contactsController.content.find(function(item) {
    return item.id == params.contact_id;
});
如果您不指向内容数组,它将不会返回项目。

正确答案是:

var contact = App.contactsController.content.find(function(item) {
    return item.id == params.contact_id;
});
如果不指向内容数组,它将不会返回项目