その中で foreach バインディング機能を呼び出し、その後コールバック関数を呼び出したい Knockout カスタム バインディング ハンドラーがあります。これを行おうとすると、「Uncaught Error: You cannot apply bindings multiple times to the same element.」エラーが発生し続けます。
私のカスタム バインディングは非常に単純です (typescript):
/// <reference path="knockout.d.ts" />
ko.bindingHandlers["postForeach"] = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
if (!allBindingsAccessor().postForeachCallback)
throw "Callback not defined for postForeach binding!";
//call foreach init functionality
ko.bindingHandlers['foreach'].init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
//call foreach update functionality
ko.bindingHandlers['foreach'].update(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
//call callback
allBindingsAccessor().postForeachCallback();
}
};
これを構築する際に欠けているものはありますか?
ありがとう!
編集:
コールバック関数
self.populateMainContentWindow = function () {
var dataTable = $(this.tableId).dataTable();
dataTable.fnDestroy();
// create the datatable
var actualTable = this.jQuery(this.tableId);
if (actualTable.length == 0) {
return false;
}
// create the data table with options
var newDataTable = actualTable.dataTable(this.options);
// always set the width afterwards
actualTable.css("width", "100%");
};
データ バインド署名 (「with」バインディング内にある):
postForeach: array, postForeachCallback: $parent.viewModel().populateMainContentWindow