2

在 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方法之前尝试进行路由?那是我用数据填充控制器的地方。

编辑:好吧,我发现路由器在我用数据填充我的arrayController之前尝试进行转换(在Ember.Application.ready方法中)。正确设置数据后是否可以“延迟”路由?

4

3 回答 3

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')
于 2012-08-16T14:27:04.770 回答
0

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

于 2012-08-16T14:34:03.440 回答
0

正确答案是:

var contact = App.contactsController.content.find(function(item) {
    return item.id == params.contact_id;
});

如果您不指向内容数组,它将不会返回项目。

于 2012-09-29T07:14:53.240 回答