2013-11-21 4 views
0

У меня есть настраиваемое связывание, которое срабатывает для каждого элемента на странице, который использует ту же привязку, т.е. этот код активирует привязку 3 раза, когда я ввожу текст в первом поле.Многопользовательский старт для нокаута

<input data-bind="pinTest: propertyOne" /> 
<input data-bind="pinTest: propertyTwo" /> 
<input data-bind="pinTest: propertyThree" /> 

Как его получить, чтобы срабатывать только один раз? Я пробовал нокаут v2.3 и v3.

У меня есть рабочий пример вопроса на http://jsbin.com/UKewOvu/2/edit?html,js,console,output

Вот код:

ko.bindingHandlers.pinTest = { 
    init: function (element, valueAccessor, allBindingsAccessor) { 

    ko.utils.registerEventHandler(element, "keyup", function() { 
     var value = valueAccessor(); 
     value(element.value); 
    }); 
    }, 
    update: function (element, valueAccessor, allBindings, viewModel, bindingContext) { 
    var value = ko.unwrap(bindingContext.$data.propertyOne); 
    console.log("in binding update -value="+value); 
    } 
}; 

var myVm = function() { 

    this.propertyOne = ko.observable(); 
    this.propertyTwo = ko.observable(); 
    this.propertyThree = ko.observable(); 
}; 

function start() { 
    ko.applyBindings(new myVm()); 
} 

ответ

1

var value = ko.unwrap(bindingContext.$data.propertyOne) создаст зависимые пакеты для propertyOne для всех 3-х свойств

Вместо делать

console.log("in binding update -value="+ ko.unwrap(valueAccessor())); 
Смежные вопросы