Javascript 升级到Knockout 3.0.0,模板/自定义绑定处理程序不再工作

Javascript 升级到Knockout 3.0.0,模板/自定义绑定处理程序不再工作,javascript,Javascript,将我的代码库升级到Knockout 3.0.0时,以下代码不再有效。有人能提供一个解决办法吗 引用模板的代码: <div data-bind="clientFormItemTemplate: {foreach: clients}"/> ko.bindingHandlers.clientFormItemTemplate = { init: function(element, valueAccessor, allBindingsAccessor, viewModel, cont

将我的代码库升级到Knockout 3.0.0时,以下代码不再有效。有人能提供一个解决办法吗

引用模板的代码:

<div data-bind="clientFormItemTemplate: {foreach: clients}"/>
ko.bindingHandlers.clientFormItemTemplate = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel, context) 
    {            
        return ko.bindingHandlers.template.init.apply (this, arguments);
    },
    update: function(element, valueAccessor, allBindingsAccessor, viewModel, context) 
    {            
        return (ko.bindingHandlers.template.update.apply (this, arguments));
    }
}

我认为您缺少
模板
绑定的
名称
属性。您可以将其添加到自定义绑定中,如下所示:

ko.bindingHandlers.clientFormItemTemplate = (function() {
    function getModifiedValue(valueAccessor) {
        return function() {
            var value = valueAccessor();
            value.name = 'clientFormItemTemplate';
            return value;
        };
    }

    return {
        init: function(element, valueAccessor, allBindingsAccessor, viewModel, context) {
            return ko.bindingHandlers.template.init(element, getModifiedValue(valueAccessor), allBindingsAccessor, viewModel, context);
        },
        update: function(element, valueAccessor, allBindingsAccessor, viewModel, context) {
            return ko.bindingHandlers.template.update(element, getModifiedValue(valueAccessor), allBindingsAccessor, viewModel, context);
        }
    };
})();

这是一个工作表(使用Knockout 3.0.0)。

您为什么不使用默认的
模板
绑定?我能想到的一个原因(如果这不是全部代码)可能是“2.绑定现在独立刷新”(从)我没有使用默认模板绑定,因为我正在迁移Flex应用程序并试图模仿Flex创建自定义组件的能力。我的自定义绑定处理程序代码还包括我在afterRender事件中附加的用于单击和双击的处理程序(它们未显示在代码段中)。在问我的问题之前,我查看了升级说明,注意到关于绑定的部分独立刷新,但我无法建立连接,因为我只有一个绑定(即foreach绑定)。好的,明白了。我注意到另一件事。
template
绑定除了使用
foreach
之外,还使用一个
name
参数来标识它应该使用的模板。可能需要将此属性添加到自定义绑定中的
valueAccessor()
。但是,如果相同的代码已经工作,那么这里就不会有问题。
ko.bindingHandlers.clientFormItemTemplate = (function() {
    function getModifiedValue(valueAccessor) {
        return function() {
            var value = valueAccessor();
            value.name = 'clientFormItemTemplate';
            return value;
        };
    }

    return {
        init: function(element, valueAccessor, allBindingsAccessor, viewModel, context) {
            return ko.bindingHandlers.template.init(element, getModifiedValue(valueAccessor), allBindingsAccessor, viewModel, context);
        },
        update: function(element, valueAccessor, allBindingsAccessor, viewModel, context) {
            return ko.bindingHandlers.template.update(element, getModifiedValue(valueAccessor), allBindingsAccessor, viewModel, context);
        }
    };
})();