升级至Knockout 3.0.0,Templates/Custom Binding Handlers不再工作

Upgrade to Knockout 3.0.0, Templates/Custom Binding Handlers no longer work

本文关键字:Custom Binding Handlers 工作 不再 Knockout Templates      更新时间:2023-10-25

当我的代码库升级到Knockout 3.0.0时,以下代码不再工作。有人能提供一个变通办法吗?

引用模板的代码:

<div data-bind="clientFormItemTemplate: {foreach: clients}"/>

模板代码:

<script type="text/html" id="clientFormItemTemplate">
<li>    
<div style="float: left; padding-left: 5px;">
  <span class="font-normal" data-bind="text: displayName"></span>     
</div>
<div class="clear"/>
</li>
</script>

模板的自定义绑定处理程序:

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

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

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

这是一个正在工作的JSFiddle(Knockout 3.0.0)。