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);
    }    
}

model.valuesomeViewModel は、追加された入力にバインドするプロパティ (観察可能) を含むビュー モデルです。しかし、withバインディングの更新を呼び出すと、 Uncaught TypeError: Cannot read property 'savedNodes' of undefined.(knockout.js デバッグ ビルド) が取得されます。を使用した場合と同じ結果が得られるようにするには、viewModelをどのように渡す必要がありますか? ありがとう!with.updatedata-bind="with: new someViewModel()"

4

1 に答える 1

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);
   }
};
于 2013-03-18T19:22:08.357 に答える