在淘汰赛中使用Attr绑定问题

时间:2013-02-14 10:50:43

标签: javascript jquery knockout.js

我正在使用knockout attr绑定数据属性,例如:

 <div data-bind="attr : { 'data-fire': Fire, 'data-age': Age }">
 </div>

现在我想要的是,如果任何可观察的varibale,即Fire and Age为空或空,而不是我想要添加一个空的属性名称。因此,在应用绑定后,如果假设Age为空,那么我不希望我的标记为:

 <div data-bind="attr : { 'data-fire': Fire, 'data-age': Age }"  data-age data-fire="Yes">
 </div>

相反,我想删除data-age并希望这个干净的标记:

 <div data-bind="attr : { 'data-fire': Fire, 'data-age': Age }" data-fire="Yes">
 </div>

有没有办法在knockout.js中实现这个目标?

1 个答案:

答案 0 :(得分:1)

您可以使用custom binding

自行控制
<div data-bind="addAttributes : { 'data-fire': Fire, 'data-age': Age }"></div>

然后有一个处理程序:

ko.bindingHandlers.yourBindingName = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        // This will be called when the binding is first applied to an element
        // Set up any initial state, event handlers, etc. here
    },
    update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        // This will be called once when the binding is first applied to an element,
        // and again whenever the associated observable changes value.
        // Update the DOM element based on the supplied values here.
    }
};

在这些方法中,只有当值不是空白时,您才能检查值并手动添加属性(例如,使用jQuery)。