2013-05-18 5 views
0
var viewModel={ 
    isChecked:ko.observable(false); 
    showMessage:ko.observable(); 
}; 

ko.bindingHandlers.doSomeing=function(){ 
    update:function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext){ 

     if(viewModel.isChecked){ 

     } 

    } 
}; 

<pre> 
<input type="checkbox" data-bind="checked:isChecked"></input> 

<input type="text" data-bind="doSomeing:showMessage"></input> 
</pre> 

при нажатии кнопки галочка запускает метод обновления в пользовательском режиме binging doSomeing, почему?knockout.js с отмеченным флажком проверяется связывание при проверке, инициирует метод обновления в пользовательских бингах, почему

но удалите, если (viewModel.isChecked) область действия, не будет инициировать метод обновления.

+0

html для этого было бы полезно. еще лучше, если вы можете сделать jsfiddle (http://jsfiddle.net/) тем, что вы пытаетесь сделать. –

ответ

0

Метод update в привязке КО выполняется в пределах вычисленного наблюдаемого. Таким образом, любые наблюдаемые, которые имеют доступ к их значениям (например, viewModel.isChecked() в вашем случае, просто выполнение viewModel.isChecked не получит доступ к значению, поэтому у вас может быть опечатка в вашем вопросе), станет зависимым и вызовет повторную функцию обновления привязки.

Просто примечание: все привязки на элементе фактически выполняются в пределах одного вычисленного значения, поэтому все привязки к этому элементу будут снова запускать свои функции обновления всякий раз, когда изменяется какая-либо зависимость. Эти зависимости отслеживаются каждый раз, поэтому они могут со временем меняться. В Knockout 3.0 привязки будут выполняться независимо друг от друга на одном элементе.

+0

Как я могу использовать viewModel.isChecked в методе обновления, когда установлен флажок, но не будет тигрировать метод update.because я должен сделать некоторые условия для viewMdel.isChecked property – fengdu

Смежные вопросы