2014-12-07 69 views
0

海蘭和感謝閱讀:emberjs刷新ArrayController與arrangedContent和@each崩潰

我有Ember.ArrayController和arrangedContent的問題。該senario如下:

我的arrayController中的項目可以通過一些操作進行修改。 我的arrangeContent在某些項目屬性上被過濾。 因此,如果觀察到的項目屬性變化arrangedContent屬性應該被刷新

我用"[email protected]"

所有設置我arrangedContent的property()實現這一工作正常,但如果我嘗試刷新來自路徑模型我然後得到錯誤信息TypeError: Cannot read property 'destroy' of undefined at ContainerView.extend.arrayWillChange

在某些情況下,它會工作,但每次都重複內容的刷新()被觸發

一些最少的代碼可能變得更加清晰...

App.IndexRoute = Ember.Route.extend({ 
    model : function(){ 
    return [App.Cars.create({color : "red", model : "march"}), 
      App.Cars.create({color : "yellow", model : "alto"}), 
      App.Cars.create({color : "blue", model : "gundam"}) ]; 
    }, 
    actions : { 
    reload : function(){ 
     this.refresh(); 
    } 
    } 
}); 

App.IndexController = Ember.ArrayController.extend({ 
    arrangedContent : function(){ 
    var data= this.get("content"); 
    data=data.filter(function(elem){ 
     return elem.get("color").match(new RegExp("el","gi"))!==null; 
    }); 
    return data; 
    }.property("lenght","[email protected]"), 
    actions : { 
    allYell :function(){ 
     this.get("content").forEach(function(elem){ 
     elem.set("color","yellow"); 
     }); 
    }, 
    erase : function(){ 
     if(this.get("length")>0){ 
     this.get("content").removeAt(0); 
     } 
    } 
    } 
}); 

一個JSBin可以在這裏http://jsbin.com/yebopobetu/3/edit?html,js,console,output

回答

1

發現我從來沒有見過有人建議重寫arrangedContent。我真的不會推薦它。

App.IndexController = Ember.ArrayController.extend({ 
    foos : function(){ 
    var data= this.get("model"); 
    return data.filter(function(elem){ 
     return elem.get("color").match(new RegExp("el","gi"))!==null; 
    }); 
    }.property("@each.color"), 
    actions : { 
    allYell :function(){ 
     this.forEach(function(elem){ 
     elem.set("color","yellow"); 
     }); 
    }, 
    erase : function(){ 
     if(this.get("length")>0){ 
     this.removeAt(0); 
     } 
    } 
    } 
}); 

http://jsbin.com/sivugecunu/1/edit

+0

那麼從燼DOC:_The陣列,代理僞裝成。在默認的ArrayProxy實現中,這和內容是一樣的。 ArrayProxy的子類可以覆蓋此屬性以提供排序和過濾等功能._ – MrVinz 2014-12-07 06:38:41

+1

它在可排序的mixin中被覆蓋,它沒有提到覆蓋會正常工作。 – Kingpin2k 2014-12-07 07:11:27

+0

爲了處理先前發生的任何其他潛在覆蓋,我可以用data = this._super()替換data = this.get(「content」):) – MrVinz 2014-12-08 02:17:57