1

我正在对数据属性使用淘汰赛 attr 绑定,例如:

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

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

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

相反,我想删除数据时代并想要这个干净的标记:

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

有没有办法在 knockout.js 中实现这一点?

4

1 回答 1

1

您可以使用自定义绑定自行控制:

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

于 2013-02-14T10:55:45.497 回答