Domanda

Mi sto godendo backbone.js sempre di più. Ho il desiderio di avere viste multiple per un dato modello:

  • Un elenco a vista, dove ogni modello ha una vista con il proprio elemento li.
  • Una vista di dettaglio che mostra tutti i dettagli di un modello.

La mia domanda è, stavo cercando un buon modo per consentire una visualizzazione di comunicare con un altro e ha eletto il seguente:

/** 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);
        }
   }
}

Le mie domande

  1. Mi sto perdendo qualcosa come imparo backbone.js che mi permetterà di fare questo nativly?
  2. C'è un motivo devo evitare questo?

Ulteriori informazioni

ho condiviso l'applicazione (abbastanza rudimentali) su GitHub: https://github.com/ aarongreenlee / apprendimento-backbone.js . Se si preferisce vedere il codice in tale ambiente, è possibile accedere da qui: https://github.com/aarongreenlee/Learning-backbone.js/commit/ea4e61d934d2f987726720e81c479f9d9bb86e09#diff-2 (iniziale commit).

Grazie per il vostro tempo e aiuto!

È stato utile?

Soluzione

Bene vostri punti di vista può avere un albero come riferimento, ma il vostro modello non dovrebbe conoscere le vostre opinioni!

Si consiglia di impostare le vostre opinioni per ascoltare gli eventi di modifica dei modelli e li hanno reagire di conseguenza (ri rendering che è).

In questo modo si evita di riferimento incrociato tra le parti inferiori del software (quello che dovrebbe essere solida roccia, del modello) e le parti superiori, i punti di vista. Classic MVC separazione.

Quindi, spostare i addViews, removeViews per Backbone.View e dovrebbe essere buona. Vi sarà la creazione di un sistema di visualizzazione gerarchica, molto simile a quello Sproutcore offerte.

Buon divertimento!

Altri suggerimenti

Una risposta è arrivato dalla Twitter da Jeremy Ashkenas di documento Nuvola

  

@aarongreenlee Non c'è ragione per evitarlo   - se si vuole avere la vostra vista mantenere un albero-come riferimento ad uno con l'altro,   Questo è certamente legittimo. - @ jashkenas

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top