2012-08-15 52 views
2

在Ember.js ArrayController中查找物品的正確方法是什麼?我在控制器中設置了一組觸點:在Ember 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方法中)。數據設置正確後,是否可以「延遲」路由?

回答

0

這個問題實際上是由於在路由器進行反序列化之後,將數據插入到arrayController中導致的。把它放在App.initialize()之前解決了這個問題。

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') 
0

正確的答案是:

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

如果不指向的內容陣列它不會返回一個項目。