2013-07-23 27 views
0

看到這個jsFiddleEmberJS - 過濾陣列移除模板自動綁定

在將過濾器應用到數組之前,自動綁定工作得很完美。但是在向數組添加過濾器函數後,模板不會自動刷新。

測試這個。

App.FieldRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 

     //scenario 1 
     //controller.set('model', App.Fields); 

     //scenario 2 
     controller.set('model', App.Fields.filter(function(item, index, enumerable) { 
     if(item.id === model.id) return true; 
    })); 
    } 
}); 

運行的jsfiddle與場景1(評論方案2並取消場景1),然後點擊「性別」,然後點擊「添加」按鈕,將項目添加到陣列中,它會立即反映在UI中。

用場景2再次運行jsFiddle。模板不會自動刷新。

回答

0

由於內容擁有App.Fields數組的相同內存引用,所以當您將App.Fields設置爲內容時,您的方案1可以使用。因此,陣列上的推送或彈出會反映到內容中。但是當你輸入路由時,你的過濾操作(在setupController中)只進行一次。

你可以有你的過濾模型在控制器

controller.setProperties({'model': App.Fields, filteringModel: model}); 

,然後過濾內容

App.FieldController = Em.ArrayController.extend({ 
    displayArray: function(){ 
     return this.get('content').filterProperty('id',this.get('filteringModel.id')); 
    }.property('[email protected]','filteringModel') 
}); 

這裏是fiddle當你「性別」和「婚姻狀況之間切換

+0

「價值觀並沒有改變。 – user10

+0

計算出的屬性還應該遵守'filteringModel'... http://jsfiddle.net/dbERr/9/ – selvagsz

+0

@SelvaG它的工作原理。更新你的答案,該小提琴。我會接受這個。 – user10