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

时间:2013-11-25 18:35:00

标签: javascript

将我的代码库升级到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));
    }
}

1 个答案:

答案 0 :(得分:0)

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

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)。