Puoi chiamare ko.applyBindings per associare una vista parziale?

Sto usando KnockoutJS e ho una vista principale e un modello di visualizzazione. Voglio una finestra di dialogo (l’interfaccia utente di jQuery) per visualizzare una finestra con un’altra vista a cui associare un modello di vista figlio separato.

L’HTML per il contenuto della finestra di dialogo viene recuperato usando AJAX, quindi voglio essere in grado di chiamare ko.applyBindings una volta che la richiesta è stata completata, e voglio associare il modello di visualizzazione figlio alla sola parte dell’HTML caricato tramite ajax all’interno della finestra di dialogo div .

È davvero ansible o devo caricare TUTTE le mie viste e visualizzare i modelli quando la pagina inizialmente viene caricata e quindi chiamare ko.applyBindings una volta?

ko.applyBindings accetta un secondo parametro che è un elemento DOM da utilizzare come root.

Questo ti permetterebbe di fare qualcosa come:

 

Quindi, puoi usare questa tecnica per associare un viewModel al contenuto dinamico che carichi nella finestra di dialogo. In generale, devi solo fare attenzione a non chiamare applyBindings più volte sugli stessi elementi, poiché ti verranno assegnati più gestori di eventi.

Mentre la risposta di Niemeyer è una risposta più corretta alla domanda, puoi anche fare quanto segue:

 

Questo significa che non devi specificare l’elemento DOM e puoi anche associare più modelli allo stesso elemento, come questo:

 

Sono riuscito a associare un modello personalizzato a un elemento in fase di esecuzione. Il codice è qui: http://jsfiddle.net/ZiglioNZ/tzD4T/457/

Il bit interessante è che applico l’attributo data-bind a un elemento che non ho definito:

  var handle = slider.slider().find(".ui-slider-handle").first(); $(handle).attr("data-bind", "tooltip: viewModel.value"); ko.applyBindings(viewModel.value, $(handle)[0]); 

Si dovrebbe guardare with binding, così come controlsDescendantBindings http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.html