Gibt es einen Grund, warum ich dies innerhalb Backbone.js vermeiden sollte?
-
08-10-2019 - |
Frage
Ich genieße Backbone.js mehr und mehr. Ich wünsche, mehrere Ansichten für ein bestimmtes Modell haben:
- Eine Liste-Ansicht, in der jedes Modell eine Ansicht hat mit einem eigenen li Elemente.
- Eine Detailansicht alle Details eines Modells zeigt.
Meine Frage ist, ich war ein guter Weg, suche einen Blick zu ermöglichen, mit anderen und wählten folgende 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
- Bin ich etwas fehlt, wie ich Backbone.js lernen, die mir erlauben, dies nativ zu tun?
- Sie haben einen Grund, warum ich dies vermeiden sollte?
Zusätzliche Informationen
Ich habe die Anwendung (ziemlich rudimentär) auf GitHub geteilt: https://github.com/ aarongreenlee / Learning-Backbone.js . Wenn Sie es vorziehen, den Code in dieser Umgebung zu sehen, können Sie es hier zugreifen:
Lösung Nun Ihre Ansichten, die einen Baum wie Bezug haben, aber Ihr Modell soll über Ihre Ansichten nicht wissen! Sie sollten Ihre Ansichten auf Änderungsereignisse aus den Modellen zu hören und sie entsprechend reagieren (re macht das ist). So können Sie Querverweise zwischen den unteren Teilen der Software zu vermeiden (die, die felsenfest sein sollte, das Modell) und den höheren Teilen, die Ansichten. Klassische MVC Trennung. So bewegen Sie Ihren addViews, removeViews zu Backbone.View und es sollte gut sein. Sie werden eine hierarchische Ansicht System erschaffen, ähnlich wie das, was SproutCore Angebote. Haben Sie Spaß!
Andere Tipps
Eine Antwort kam von Twitter von Jeremy Ashkenas von Document Wolke
@aarongreenlee Kein Grund, es zu vermeiden - wenn Sie wollen Ihre Ansichten halten einen baumartigen Bezug zueinander stehen, das ist sicherlich legitim. - @ jashkenas