Lösung Modell in Backbone.js - Anrufen stellen Sie mit {silent:true} und trigger-Attribut-change-events?

Ich habe ein Diagramm, Modell:

//PSEUDO
chartModel = Backbone.Model.extend({
     defaults: {
         year : 1970,
         selected = ["Sweden", "Denmark"]
     }
 }

Ich würde jetzt gerne beide Jahr & ausgewählt:

chartModel.set({year: 1987, selected : ["Finland"]})

Aber bevor ich trigger das Modell ändern möchte ich "auflösen" die änderungen an diesem instabilen Modell. Also ich pass silent:true und überschreiben Sie die set-Methode:

chartModel.set({year: 1987, selected : ["Finland"]}, {silent:true})

//Pseudo set override
set : function(attrs, options) {

  //Extract attributes and options.
  options || (options = {});
  if (!attrs) return this;
  if (attrs.attributes) attrs = attrs.attributes;
  var now = this.attributes, escaped = this._escapedAttributes;

  [...]

  datamanager.loadNewDataIfNeeded(oldModel, newModel, callback)

Ich würde speziell wie ein Daten-manager "diff" die alten Attribute vs die neue, bevor ich auslösen des change-Ereignisses:

 callback : function(){
      chartModel.change();
 }

Nun - wenn ich weiß, dass die richtigen Daten vorhanden sind, möchte ich die Ansichten zu Rendern.

... Aber meiner Sidebar anzeigen, die gebunden ist, zu ändern:ausgewählt nicht machen?

Sidebar = Backbone.View.extend({    
    initialize: function(){
        this.model.bind("change:selected", this.render);
    }
    render : [...]
});

Meine Fragen:

  1. Beim auslösen-Modell.change() mit der Hand, warum werden nicht die einzelnen Attribut-change-events ausgelöst?
  2. Brauche ich wirklich zu überschreiben, das Modell set-Methode zu erreichen, was ich möchte ("Lösung der Modell wenn Sie mehrere Attribute geändert werden, auf einmal") oder gibt es eine bessere Methode?

InformationsquelleAutor dani | 2011-05-30

Schreibe einen Kommentar