我的應用程序中有一個相當複雜的頁面,顯示了很多不同的模型。我通過/updates
REST呼叫實時更新其中幾個型號。我傳遞一個last_request_timestamp
參數,它返回自上次調用以來創建或修改的模型。將模型推送到商店時更新視圖
我使用store.push(model, model_json)
將模型添加到商店。但是,在模型推入後模板不會更新。我如何確保商店中的模型與視圖之間有約束力?
我的應用程序中有一個相當複雜的頁面,顯示了很多不同的模型。我通過/updates
REST呼叫實時更新其中幾個型號。我傳遞一個last_request_timestamp
參數,它返回自上次調用以來創建或修改的模型。將模型推送到商店時更新視圖
我使用store.push(model, model_json)
將模型添加到商店。但是,在模型推入後模板不會更新。我如何確保商店中的模型與視圖之間有約束力?
好的,我想通了。 Ember.js FAQ表示
另一方面,過濾器執行商店緩存中所有記錄的實時搜索。只要將新記錄加載到商店中,過濾器將檢查記錄是否匹配,如果是,則將其添加到搜索結果數組中。如果該數組顯示在模板中,它將自動更新。
...
請記住,記錄不會在過濾器中顯示出來,如果店不知道他們。您可以使用商店的
push()
方法確保商店中有記錄。
所以在控制器中,我想要實時更新,我使用商店的filter()
來獲取模型。
App.PostController = Ember.ObjectController.extend({
comments: function() {
var postId = this.get('id');
return this.get('store').filter('comment', function(comment) {
return comment.get('post.id') == postId;
});
}.property('comments')
});
現在,每當我push()
新Comment
來存儲,它會自動添加到視圖中的相應崗位。
您可能需要將它們顯式推送到使用pushObject
在頁面上表示的集合中。 store.push
將返回實時記錄,所以你可以做這樣的事情。
var book_record = store.push('book', model_json);
this.get('controllers.books.content').pushObject(book_record);
這是假設BooksController
是一個標準ArrayController
。
不幸的是,它需要兩個步驟(但簡單的步驟)。您需要將其添加到商店,然後保存該記錄以便通過適配器將更改傳播給偵聽器。
var pushedRecord = store.push(model, model_json);
pushedRecord.save();
此外,如果有多個記錄,您可以撥打pushMany
,而不是單獨互推的。你仍然必須保存每個。
store.pushMany(model, jsonArray).forEach function (pushedInstance) {
pushedInstance.save();
}
你不需要調用save()。只需添加就足夠了。 – kumkanillam