2013-03-13 6 views
6

Chcę kierowanie nokaut ViewModel do pewnej części dom jako sposób:Wyklucz elementy DOM z nokautu stosuje się do wiązania?

ko.applyBindings(MyViewModel,$('#Target')[0]); 

Jednak nie chce on mieć zastosowanie do wszystkich Doms poniżej. Powodem tego jest to, że cały obiekt SPA nie działa zbyt dobrze - nie może nadążyć za gigantycznym modelem, który wynika z włączenia każdej potencjalnej interakcji do jednego gigantycznego obiektu. W związku z tym strona składa się z wielu częściowych widoków. Chcę, aby każdy cząstkowy tworzył swój własny ViewModel i zapewniał interfejs do interakcji z rodzicem.

Niektóre próbki dom

<div id="Target"> 
    <!--Everything here should be included except--> 
    <div data-bind="DoNotBindBelowThis:true"> 
      <!--Everything here should NOT be included by the first binding, 
       I will specifically fill in the binding with targetted 
       ApplyBind eg. ko.applyBindings(MyOtherViewModel, $('#MyOtherTarget')[0]) 
       to fill the gaps--> 
      <div id="MyOtherTarget"> 
      </div> 
    </div> 
</div> 

Ponownie jak mogę wykluczyć całe drzewo DOM poniżej div oznaczony z DoNotBindBelowThis od applyBindings?

Odpowiedz

11

Spójrz na blogu tutaj: http://www.knockmeout.net/2012/05/quick-tip-skip-binding.html

Zasadniczo można tworzyć niestandardowe wiążąca jak:

ko.bindingHandlers.DoNotBindBelowThis = { 
    init: function() { 
     return { controlsDescendantBindings: true }; 
    } 
}; 
+0

Nie bardzo rozumiesz, nie powinniśmy wrócić controlsDescendantBindings fałszywe, zamiast prawdziwego? – Alwyn

+0

'controlsDescendantBindings: true' mówi KO, że my (to powiązanie) poradzimy sobie z zastosowaniem powiązań z naszymi dziećmi. W powyższym przykładowym wiązaniu jest wszystko, co zostało zrobione, więc dzieci zostają pozostawione same sobie. Następnie możesz wrócić i wywołać 'ko.applyBindings' do określonego elementu DOM, który żyje wewnątrz elementu, który ma to powiązanie. –

+0

Tak, to zrobiłem. Dziękuję Ci. – Alwyn

Powiązane problemy