2010-12-10 15 views
3

Ich genieße backbone.js mehr und mehr. Ich möchte mehrere Ansichten für ein gegebenes Modell haben:Gibt es einen Grund, warum ich das in Backbone.js vermeiden sollte?

  • Eine Listenansicht, wo jedes Modell eine Ansicht mit seinem eigenen li-Element hat.
  • Eine Detailansicht mit allen Details eines Modells.

Meine Frage ist, ich war ein guter Weg, suche einen Blick zu ermöglichen, mit anderen und wählte die folgenden zu kommunizieren:

/** Allow a model to keep track of it's views. **/ 
Backbone.Model.prototype.addView = function (view) { 
    // Ensure our model has a view array. 
    if (typeof this.views === 'undefined') 
    { 
     this.views = []; 
    } 

    // Append our newest view to the array only if it is not already present. 
    if (_.indexOf(this.views, view) === -1) 
    { 
     this.views.push(view); 
    } 
} 

/** Allow a model to remove all of it's views. 
* 
* @param {Object} args Any arguments will be provided to the view's method. 
*/ 
Backbone.Model.prototype.unloadViews = function (args) { 
    var n = (typeof this.views === 'undefined') ? 0 : this.views.length; 
    for (var i = 0; i < n; i++) 
    { 
     var view = this.views[i]; 
     if (typeof view.unloadView === 'function') 
     { 
      view.unloadView(args); 
     } 
    } 
} 

/** Allow a model to re-render all of it's views. 
* 
* @param {Object} args Any argyments will be provided to the view's method. 
*/ 
Backbone.Model.prototype.renderViews = function (args) { 
    var n = (typeof this.views === 'undefined') ? 0 : this.views.length; 
    for (var i = 0; i < n; i++) 
    { 
     var view = this.views[i]; 
     if (typeof view.render === 'function') 
     { 
      view.render(args); 
     } 
    } 
} 

Meine Fragen

  1. bin ich etwas fehlt wie ich backbone.js lerne, was mir erlaubt, das natürlich zu machen?
  2. Gibt es einen Grund, warum ich das vermeiden sollte?

Zusätzliche Informationen

ich die Anwendung freigegeben haben (ziemlich rudimentär) auf GitHub: https://github.com/aarongreenlee/Learning-backbone.js. Wenn Sie den Code in dieser Umgebung lieber sehen möchten, können Sie hier darauf zugreifen: https://github.com/aarongreenlee/Learning-backbone.js/commit/ea4e61d934d2f987726720e81c479f9d9bb86e09#diff-2 (initial commit).

Vielen Dank für Ihre Zeit und Hilfe!

+0

+1 für mich auf Backbone.js. – Stephen

Antwort

13

Nun Ihre Ansichten können einen Baum wie Referenz haben, aber Ihr Modell sollte nicht über Ihre Ansichten wissen!

Sie sollten Ihre Ansichten einstellen, um zu hören, um Ereignisse von den Modellen zu ändern und sie entsprechend reagieren zu lassen (r render).

Auf diese Weise vermeiden Sie Querverweise zwischen unteren Teilen Ihrer Software (die eine sollte solide sein, das Modell) und die höheren Teile, die Ansichten. Klassische MVC-Trennung.

Also verschieben Sie Ihre AddViews, removeViews zu Backbone.View und es sollte gut sein. Sie werden ein hierarchisches Ansichtssystem erstellen, ähnlich wie es bei sproutcore der Fall ist.

Viel Spaß!

1

Eine Antwort kam von Twitter von Jeremy Ashkenas von Document Wolke

@aarongreenlee Kein Grund, es zu vermeiden - wenn Sie Ihre Ansichten zu halten, um einen einen baumartigen Bezug haben wollen eine anderen, das ist sicher echt. - @ jashkenas

Verwandte Themen