2012-02-09 11 views
6

Mi modelo de vista de aplicación está creciendo muy grande. ¿Cómo puedo dividirlo adecuadamente en archivos y espacios de nombres? ¿Creo un segundo objeto de espacio de nombres y paso el modelo de vista como un parámetro?dividir knockoutjs

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

Esta respuesta puede ayudarlo: http://stackoverflow.com/questions/8676988/example-of-knockoutjs-pattern-for-multi-view-applications. Tiene tres opciones para usar modelos de vista múltiple en Knockout. –

Respuesta

11

Mi preferencia personal es que no se separó mis applyBindings llamadas y en lugar de trabajar con una sola rama espacio de nombres global fuera de este.

Mi razonamiento es que para que las vinculaciones múltiples funcionen correctamente y no entren en conflicto, debe tener mucho cuidado de que los elementos dom seleccionados no cambien. Desafortunadamente, el marcado tiene un desagradable hábito de cambiar con el tiempo, lo que puede ocasionarle problemas con su viewModels más adelante.

Mi enfoque general que he utilizado en un proyecto muy grande KO ha sido

  1. Un espacio de nombres de primer nivel mundial para toda la aplicación, por ejemplo myapp
  2. Dividir bloques funcionales separados en archivos separados. Usualmente con su propio espacio de nombres distintivo. p.ej. `myapp.navigation '
  3. Si un espacio de nombres en particular se vuelve demasiado grande, divídalo en más espacios de nombres secundarios o, si eso no es apropiado, divida el mismo espacio de nombres en varios archivos.
  4. Mash todos los archivos al final para preservar el rendimiento.

Algunos código de espacio de nombres Recientemente he estado usando

Así que en su archivo myapp.navigation que tendría

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

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

Esto es sólo la abreviatura para el uso de una función de auto invocación a pasar en un espacio de nombre construido manualmente. Le da un cierre privado y puede usar varias llamadas de Namespace con el mismo espacio de nombres en diferentes archivos js.

Su applyBindings llamada ahora siempre puede ser

ko.applyBindings(myapp); 

Espero que esto ayude.