2011-06-28 14 views
11

Estoy tratando de portar una aplicación asp mvc existente para utilizar knockoutjs (js/html puros) ya que realmente no necesito ninguna funcionalidad dentro de asp mvc. Sin embargo, un problema que puedo evitar es la forma en que estoy manejando algunas de mis páginas.KnockoutJS: ¿varias vistas parciales dentro de la vista principal?

Tengo una página que contiene aproximadamente 12 vistas parciales, cada parcial tiene su propio modelo. Ahora con Knockout JS parece que sólo se debe tener muy 1 viewmodel/foto por página, sin embargo la página Tengo contiene una gran cantidad de información, las secciones serían similares a:

  • datos del cliente
  • clientes dirección
  • pedidos de los clientes recientes
  • tarjetas de cliente
  • Recursos de clientes
  • ...

Para hacer las cosas más complicadas si algunos detalles cambian en parte, es necesario que cambie los datos en otra parte. Así que digamos que quita una tarjeta, necesita decirle al control de fondos que ya no tiene una tarjeta, por lo que no tendrá fondos. (Esto es todo un ejemplo abstracto, pero con suerte ilustra el punto)

Así que estoy un poco inseguro de cómo hacer esto en el nocaut, ya que eso preferiría tenerlo como un gran modelo, que me gustaría hacer, pero contiene MUCHA información. Además de múltiples formularios, ya que puede actualizar su dirección sin tener que actualizar todo lo demás.

¿Debo hacer un modelo grande para esta vista y solo tratarlo? o hay una forma de que las vistas hablen entre ellas?

+0

¿Alguien tiene algún tutorial decente en general para Knockout ya que encontré la documentación un poco corta, y solo había algunos pequeños ejemplos. Nada significativo como una aplicación de demostración que lo mostró trabajando en varias páginas, etc. – somemvcperson

+0

Solo para agregar algo de contexto al bit de la aplicación de demostración, encontré que su sitio tenía algunos ejemplos decentes, pero solo parecían usar un modelo y vista de vista, nunca un modelo, entonces, ¿de qué se trata este otro modelo? de lo contrario es solo VVM ... – somemvcperson

Respuesta

3

Mi estrategia es utilizar un modelo de vista grande. No importa si lo pones, las vistas parciales son un concepto del lado del servidor y una vez que todo se transfiere al lado del cliente, sería una gran cantidad de información de datos en una sola página.

Sin embargo, para que todo sea manejable, me aseguro de que cada código de manipulación de Javascript esté escrito en su propia vista parcial. Esto facilita el seguimiento de la funcionalidad y su código respectivo.

Así que, básicamente, rellena su principal objeto de matriz Customers en la página principal y luego llama a las funciones para completar los detalles, direcciones, etc. que se definen respectivamente en cada una de las vistas parciales.

+1

Gracias por la respuesta, una cosa que todavía me preocupa sobre el estilo de un gran modelo es que cada modelo dentro del modelo más grande (es decir, Dirección, Tarjeta) se guardan de forma independiente. Sin embargo, desde mi aspecto inicial parecía que persistieras todo el modelo a la vez ... ¿tengo que escribir algo personalizado para hacer esto? ¿o es tan simple como exponer saveCard (index) saveAddress (index) como métodos que simplemente lo envían al servidor? – somemvcperson

+0

no realmente. si tiene modelos en un modelo más grande, solo tiene que asegurarse de hacer referencia a ellos correctamente dentro de las vistas parciales, p. 'Add Card'. No lo he probado realmente porque terminé poniendo todo en un modelo de vista única. ningún modelo dentro del modelo; no es exactamente una gran solución. – neebz

+2

Por cierto, me acabo de dar cuenta de que también puedes aplicar enlaces múltiples encapsulando tus vistas parciales dentro de un div y luego llamando a 'ko.applyBinding (partialViewModel," id of div ")'. El segundo parámetro describe dónde aplicar los enlaces a. – neebz

3

Me gustaría advertir sobre un modelo de vista de monstruo, ya que crea un acoplamiento apretado que querrá evitar en aplicaciones complejas.

Una mejor solución es construir un sistema de pub/sub sobre ko.subscribable. La comunicación entre los modelos de vista se facilita luego mediante la administración de suscripciones a varios eventos. Es un poco más de trabajo por adelantado, pero pagará dividendos en el futuro.

Here es una publicación de blog que amplía el tema. Recomiendo este blog. Es un gran recurso para desafíos y estrategias específicos de knockout.

Cuestiones relacionadas