2013-03-18 4 views
1
ko.bindingHandlers.editMode = 
{ 
    update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) 
    { 
     var newValueAccessor = ko.utils.unwrapObservable(valueAccessor()); 
     var $element = $(element); 
     var viewModel = new someViewModel(); 
     $element.append("<input type='text' data-bind='value: model.value' />"); 
     ko.bindingHandlers.with.update(element, function() { return viewModel }, allBindingsAccessor, viewModel, bindingContext); 
    }  
} 

someViewModel является вид модели, который содержит свойство model.value (наблюдаемое), который я хочу связать с добавленным входом. Но при вызове обновления для привязки with я получаю Uncaught TypeError: Cannot read property 'savedNodes' of undefined. (сборка отладки knockout.js). Как передать viewModel в with.update, чтобы получить тот же результат, что и при использовании data-bind="with: new someViewModel()"? Спасибо!вперед модифицированный valueAccessor для ko.bindingHandlers.with

ответ

2

Взаимодействие with включает в себя функцию init, где выполняется захват дочерних элементов для использования в качестве анонимного шаблона.

Я не уверен, что вы фактически используете значение, передаваемое привязке (valueAccessor). Вы хотите, чтобы он обновлялся при изменении этого значения?

В противном случае, проще модель, вероятно:

ko.bindingHandlers.mySpecialWith = { 
    init: function(element, valueAccessor, all, data, context) { 
     var newData = new someViewModel(); //create some new data using what was passed in or however you want 

     //manipulate element's children, if necessary  

     ko.applyBindingsToNode(element, { 'with': newData }, context); 
    } 
}; 
+0

Да, мне нужно обновить при изменении значения, поэтому я использую обновление. О значении Аксессор ... на самом деле я использую его, но не в показанном примере :) Мой плохой – VladN

+0

Изменяется ли содержимое элемента (где вы делаете '$ element.append') в зависимости от изменений в valueAccessor (что передается к привязке)? –

+0

Нет. Я просто пытаюсь привязать модель представления к добавленному элементу. Модель просмотра отличается от той, которая привязана к родительскому. Я попытался вызвать applyBindings над добавленным элементом, но он говорит, что «модель не определена», даже если в модели представления существует свойство модели. – VladN