2012-04-03 11 views
1

DS.Store#findクエリの結果を含むEmber.ArrayControllerがあります。アプリは新しいアイテムが追加されたことをプッシャーからの通知を受け ModelArrayにアイテムをDS.Storeに保存せずにアイテムを追加する#commit

は、私はそれをリストに追加したい:

App.Item = DS.Model.extend({ 
    name: DS.attr("string") 
}); 

App.latestItemsController = Ember.ArrayController.create({ 

    init: function() { 
     // load a page of data from the server 
     this.set("content", App.store.find(App.Item, {page: 1})); 

     // subscribe to events from our app-wide message pump 
     // which dispatches events from Pusher 
     App.get("eventQueue").on("item-added", _(this.itemAdded).bind(this)); 
    }, 

    // called whenever we're notified of a new item being added by someone else 
    itemAdded: function(data) { 

     // don't want to do this as it'll save next time we do a App.store.commit(); 
     App.store.createRecord(App.Item, data); 

     // can't do this because it's a DS.Model and tells you to use createRecord: 
     // plus as it's a filtered result even if the App.Item.create succeeded 
     // then we'd get an error because this.content is immutable [1] 
     this.pushObject(App.Item.create(data)); 

     // ... not sure what else to try! 
    } 
}); 

これは、以下の質問に対する本質的に似ています[1] Adding item to filtered result from ember-data

を[2] create temporarty non persistent object in Ember-Data

+0

同じことをやろうとしています。あなたはそれを働かせましたか? – odigity

答えて

0

を(1)を使用し、それらを新しいとしてフラグ付けされることなく、レコードにロードする#load。

(2)DS.AdapterPopulatedModelArrayでは、変更を許可しません。私が行うことは、自分のDS.ModelArrayを手動で作成し、DS.Storeから返されたものにcontentプロパティとisLoadedプロパティをバインドすることです。

関連する問題