vistas vista ventana una parciales parcial pagina net mvc multiples modal misma llamar desde con asp ajax html5 knockout.js

ajax - ventana - vista parciales mvc



¿Puedes llamar a ko.applyBindings para enlazar una vista parcial? (4)

Debería consultar el enlace with , así como controlsDescendantBindings http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.html

Estoy usando KnockoutJS y tengo una vista principal y un modelo de vista. Quiero que aparezca un cuadro de diálogo (el jQuery UI) para abrir con otra vista a la que se debe vincular un modelo de vista hijo separado.

El HTML para el contenido del cuadro de diálogo se recupera utilizando AJAX, por lo que quiero poder llamar a ko.applyBindings una vez que la solicitud se haya completado, y quiero vincular el modelo de vista hijo a solo la parte del HTML cargado mediante ajax dentro del cuadro de diálogo div .

¿Es esto realmente posible o necesito cargar TODAS mis vistas y modelos cuando la página se carga inicialmente y luego llamar a ko.applyBindings una vez?


Me las arreglé para enlazar un modelo personalizado a un elemento en tiempo de ejecución. El código está aquí: http://jsfiddle.net/ZiglioNZ/tzD4T/457/

Lo interesante es que aplico el atributo de enlace de datos a un elemento que no definí:

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


Si bien la respuesta de Niemeyer es una respuesta más correcta a la pregunta, también puede hacer lo siguiente:

<div> <input data-bind="value: VMA.name" /> </div> <div> <input data-bind="value: VMB.name" /> </div> <script type="text/javascript"> var viewModels = { VMA: {name: ko.observable("Bob")}, VMB: {name: ko.observable("Ted")} }; ko.applyBindings(viewModels); </script>

Esto significa que no tiene que especificar el elemento DOM, e incluso puede enlazar varios modelos al mismo elemento, como este:

<div> <input data-bind="value: VMA.name() + '' and '' + VMB.name()" /> </div>


ko.applyBindings acepta un segundo parámetro que es un elemento DOM para usar como raíz.

Esto te permitiría hacer algo como:

<div id="one"> <input data-bind="value: name" /> </div> <div id="two"> <input data-bind="value: name" /> </div> <script type="text/javascript"> var viewModelA = { name: ko.observable("Bob") }; var viewModelB = { name: ko.observable("Ted") }; ko.applyBindings(viewModelA, document.getElementById("one")); ko.applyBindings(viewModelB, document.getElementById("two")); </script>

Por lo tanto, puede utilizar esta técnica para vincular un viewModel al contenido dinámico que carga en su cuadro de diálogo. En general, solo debe tener cuidado de no llamar a applyBindings varias veces en los mismos elementos, ya que obtendrá varios controladores de eventos adjuntos.