Korzystam z KnockoutJS i mam widok główny i model widoku. Chcę, aby okno dialogowe (interfejs jQuery) wyskakowało wraz z innym widokiem, z którym ma zostać powiązany oddzielny model widoku potomnego.
HTML dla zawartości okna dialogowego jest pobierany za pomocą AJAX, więc chcę móc zadzwonić ko.applyBindings
po zakończeniu żądania i chcę powiązać model widoku potomnego tylko z częścią HTML załadowaną za pośrednictwem ajax wewnątrz div okna dialogowego.
Czy to rzeczywiście możliwe, czy muszę ładować WSZYSTKIE moje widoki i modele widoków, gdy strona początkowo ładuje się, a następnie wywołuje ko.applyBindings
raz?
źródło
ko.cleanNode(document.getElementById("one")
aby wyczyścić rzeczy lubko.removeNode(document.getElementById("one")
wyczyścić rzeczy i usunąć węzeł z DOM.cleanNode
iremoveNode
nie usunie programów obsługi zdarzeń, więc zachowaj ostrożność. W niektórych przypadkach lepiej jest użyćtemplate
lubwith
wiązania na tych obszarach, aby renderować nowe elementy.$(element).unbind();
aby usunąć wszystkie programy obsługi.Chociaż odpowiedź Niemeyera jest bardziej poprawna odpowiedź na pytanie, to mogłoby również wykonać następujące czynności:
Oznacza to, że nie musisz określać elementu DOM i możesz nawet powiązać wiele modeli z tym samym elementem, jak poniżej:
źródło
with
nie jest tanie, patrz: linkUdało mi się powiązać niestandardowy model z elementem w czasie wykonywania. Kod jest tutaj: http://jsfiddle.net/ZiglioNZ/tzD4T/457/
Interesujące jest to, że stosuję atrybut wiązania danych do elementu, którego nie zdefiniowałem:
źródło
Powinieneś spojrzeć na
with
powiązanie, a takżecontrolsDescendantBindings
http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.htmlźródło