3

その中で 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
4

3 に答える 3

1

あなたが投稿したコードとは何の関係もないようです。むしろ、applyBindings への呼び出しが複数あり、そのうちの 2 つが同じ要素にヒットしているようです。

例: http://jsfiddle.net/tlarson/bFKuL/ (コンソールでエラーを確認)

var vm = {
    Name: "George"
}
ko.applyBindings(vm);
ko.applyBindings(vm);

マークアップ:

<div data-bind="text:Name"></div>

これを回避するには、同じ要素で applyBindings を 2 回呼び出さないでください。コードでこれを行う方法を正確に把握するには、問題を示すフィドルなど、コードをさらに確認する必要があります。

于 2013-09-21T03:40:52.480 に答える