Сделайте так, чтобы все шаблоны foreach связывались с одинаковыми функциями событий afterAdd и beforeRemove.

Мне нужен способ, чтобы все шаблоны в Knockout связывали одни и те же функции событий, например:

ko.bindingHandlers.foreach.afterAdd = function(){ ... }

person I.G. Pascual    schedule 13.09.2013    source источник


Ответы (1)


Вы можете написать оболочку для привязки шаблона, которая добавляет эти параметры в сценарий foreach. Возможно что-то вроде:

ko.bindingHandlers.myTemplate = {
    init: function (element, valueAccessor, allBindings, value, context) {
        var options = ko.unwrap(valueAccessor());

        if (options && typeof options === "object" && options.foreach) {
            options.afterAdd = ko.bindingHandlers.myTemplate.afterAdd;
            options.beforeRemove = ko.bindingHandlers.myTemplate.beforeRemove;
        } 

        ko.applyBindingsToNode(element, {
            template: options
        }, context);


        return {
            controlsDescendantBindings: true
        };
    },
    beforeRemove: function (element, data) {
        console.log("remove", element, data);

        ko.removeNode(element);
    },
    afterAdd: function (element, data) {
        console.log("add", element, data);
    }
};

Образец: http://jsfiddle.net/rniemeyer/Xnbe2/

person RP Niemeyer    schedule 13.09.2013