2014-10-27 58 views
1

這是預期的行爲嗎?當ArrayController重新訂購時,Ember itemController得到重新生效

App.PostsController = Ember.ArrayController.extend({ 
    itemController: 'post', 
    sortProperties: ['date'], 
    sortAscending: false 
}); 

App.PostController = Ember.ObjectController.extend({ 
    init: function() { 
    console.log('post controller init'); 
    this.set('propertyNotIncludedInModel', true); 
    } 
}); 

說我有一個職位列表,我內嵌編輯其中一個職位的日期。 PostsController將重新排列列表。一旦它發生,控制檯將記錄日期改變的那個人運行init。當然,任何控制器屬性(不是模型屬性),不再存在(我的意思是,這是一個新的對象,所以任何沒有理由在那裏的屬性是未定義的)。

你可以看到這發生在這jsBin

這似乎是非常錯誤的。我覺得它打破了現實生活中的任何類比。如果我有一堆物體坐在桌子上,我想重新排列它們,我不會銷燬我想要移動的物體,然後重新創建它。 Ember對此行爲的理由是什麼?我如何處理?我需要在數組中位置可能改變的對象上設置控制器屬性。更好的是,我需要該對象所代表的視圖和它們的組件來堅持和維護它們自己的狀態和屬性 - 目前didInsertElement正在項目控制器下的每個視圖/組件上被調用,使事情變得更加複雜。如何確保移動對象時我需要的屬性和子視圖保持不變?

回答

1

它取決於你如何應用更改狀態。如果您是由物業訂購,則只要物業發生變化,訂單就會發生變化。如果你想在觸發重排序之前等待一些事情發生,我會使用buffered proxy pattern.我編輯你的jsbin作爲例子。 http://jsbin.com/zopelu/1/

編輯我錯過了有關控制器被銷燬和重新創建的部分。我認爲這個bug是在1.7版本中引入的,並且幾乎可以用fixed

+0

我知道這個命令會馬上改變 - 我對此沒有任何問題。這是訂單改變的實施方式。被移動的物品控制器似乎被破壞,然後重新創建,然後插入到正確的位置。這對我來說似乎是錯誤的。 – Andrew 2014-10-28 01:01:49

+0

謝謝,很好的發現這個問題。他們正在談論其他一些方法,但它聽起來可能是相同的根本原因。如果沒有其他人在此期間發現更明確的東西,我會明天接受你的回答。 – Andrew 2014-10-28 01:22:53