2012-02-09 12 views
6

Il mio modello di visualizzazione di app sta crescendo molto grande. Come posso dividerlo correttamente in file e spazi dei nomi? Creo un secondo oggetto namespace e faccio passare il modello di vista come parametro?splitting up knockoutjs

var BALL = {}; 
BALL.roll = function(avm) { // function code }; 
+3

Questa risposta può aiutarti: http://stackoverflow.com/questions/8676988/example-of-knockoutjs-pattern-for-multi-view-applications. Ha tre opzioni per l'utilizzo di più modelli di visualizzazione in Knockout. –

risposta

11

mia preferenza personale è di non contempla i miei applyBindings chiamate e invece lavorare con un solo ramo namespace globale fuori di questa.

Il mio ragionamento è che per il corretto funzionamento di più binding non è necessario creare conflitti, è necessario prestare molta attenzione agli elementi DOM target selezionati che non cambiano. Sfortunatamente il markup ha una brutta abitudine di cambiare nel tempo, cosa che potrebbe metterti nei guai con i tuoi viewModels in seguito.

Il mio approccio generale che ho usato su un grande progetto di KO è stato

  1. Uno spazio dei nomi globale di livello superiore per l'intera applicazione ad esempio myapp
  2. Split fino blocchi funzionali distinti in file separati. Di solito con il proprio spazio dei nomi distinto. per esempio. `myapp.navigation '
  3. Se uno spazio dei nomi, in particolare, diventa troppo grande, suddividerlo in ulteriori spazi secondari o, se ciò non è appropriato, suddividere lo stesso spazio dei nomi su più file.
  4. Mescolare tutti i file alla fine per preservare le prestazioni.

Alcuni codice namespace Recentemente ho usando

Quindi, nel file myapp.navigation si avrebbe

Namespace("myapp.navigation", function() { 
    var self = this; // your myapp.navigation object 

    this.someFunction = function() { 
    }  
}); 

Questa è solo una scorciatoia per utilizzando una funzione di auto invocando a passare in uno spazio dei nomi costruito manualmente. Ti offre una chiusura privata e sei libero di utilizzare più chiamate nello spazio dei nomi con lo stesso spazio dei nomi in un diverso file js.

tuo applyBindings chiamata può ora essere sempre

ko.applyBindings(myapp); 

Spero che questo aiuti.