2012-04-03 5 views
1

Ich habe eine Ember.ArrayController, die die Ergebnisse einer DS.Store#find Abfrage enthält.Hinzufügen von Element zu ModelArray, ohne dass es in DS.Store # commit

Wenn die App eine Benachrichtigung von Pusher erhält, dass ein neues Element hinzugefügt worden ist, möchte ich es in die Liste hinzuzufügen:

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! 
    } 
}); 

Dies ist ähnlich in der Natur auf die folgenden Fragen:

[1] Adding item to filtered result from ember-data

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

+0

Der Versuch, das Gleiche zu tun. Hast du es jemals funktioniert? – odigity

Antwort

0

(1) Verwenden #LOAD Datensätze zu laden, ohne in sie als neue gekennzeichnet werden.

(2) Ein DS.AdapterPopulatedModelArray lässt keine Änderung zu. Ich würde manuell mein eigenes DS.ModelArray erstellen und die Eigenschaften content und isLoadeed an die vom DS.Store zurückgegebene binden.