正如標題所說,在保存新模型後,我如何在商店中預先添加而不是追加?EmberData,如何在保存後將對象預先插入商店,而不是追加它?
現在,創建記錄將在商店中將新對象推到現有對象的末尾。我需要在開始時推它,你怎麼做?
正如標題所說,在保存新模型後,我如何在商店中預先添加而不是追加?EmberData,如何在保存後將對象預先插入商店,而不是追加它?
現在,創建記錄將在商店中將新對象推到現有對象的末尾。我需要在開始時推它,你怎麼做?
好的,我創建了一個Ember Twiddle,每個新記錄插入到數組的開頭。它應該可以幫助你 - demo。
基本上你需要改變DS.RecordArrayManager._addRecordToRecordArray
和改變:
array.addInternalModel(record);
要:
array.addInternalModel(record, 0);
如果你想創造一些特定的存儲方法類似store.createRecordAtBeginning
你將不得不通過一些數據連同InternalModel
通過許多類,並在DS.RecordArrayManager._addRecordToRecordArray
訪問它,以確定您需要插入的位置。
我更喜歡你最初的建議'Ember.computed.sort',少得多。 – locks
是的,我也是,但在活動數組開始時追加的想法非常有趣。總是令人興奮的看看Ember內部的工作原理。 ;) –
我終於設法得到它使用Ember.computed.sort工作:
// controller:
import Ember from 'ember';
export default Ember.Controller.extend({
sortProp: ['position:asc'],
sortedModels: Ember.computed.sort('model', 'sortProp'),
});
模板:
{{#each sortedModels as |mdl|}}...
你爲什麼需要它?如果在展示之前進行分類,會不會更容易些? –
我已經在緩存中加載X記錄,我已經顯示在列表中,然後添加Yth記錄,並且我不想再次調用服務器來再次加載X記錄,因爲它們沒有更改無論如何。這就是爲什麼我希望Yth記錄被預先附加的情況。現在,這個新記錄被推到實際列表的末尾,我不想要這個,我想找到一個方法在列表的開始處找到,否則我應該再次查詢服務器。 – Twisted1919
您不需要再次查詢服務器。您可以讓數據數組按照'order'等屬性進行排序。你用'order = 0'推新記錄,然後你用'store.peekAll'獲得所有當前記錄(除了新記錄),將它們的'order'增加1,那麼你需要有一些觀察者或計算出來的屬性,在你的視圖層(組件或控制器)重新排序數組。 –