26

将Knockout 的“attr”数据绑定“readonly”“disabled”等独立属性一起使用的建议“最佳实践”方式是什么?

这些属性的特殊之处在于它们通常通过将属性值设置为属性名称来启用(尽管如果您只是在 HTML 中包含没有任何值的属性名称,许多浏览器也可以正常工作):

<input type="text" readonly="readonly" disabled="disabled" value="foo" />

但是,如果您不想应用这些属性,通常的做法是从 HTML 中完全省略它们(而不是像 readonly="false" 那样做):

<input type="text" value="foo" />

Knockout 的“attr”数据绑定不支持这种情况。一旦我提供了一个属性名称,我还需要提供一个值:

<input type="text" data-bind="attr: { 'disabled': getDisabledState() }" />

是否有跨浏览器的方式关闭“禁用”或“只读”?或者,如果我不想禁用该项目或将其设为只读,是否有一个自定义绑定的技巧可以用来不呈现任何内容?

4

3 回答 3

40

Knockout 的“attr”数据绑定确实支持这种情况,只是返回nullundefined从您的getDisabledState()函数返回,然后它不会发出属性。

演示小提琴

于 2013-01-04T21:33:33.327 回答
9

您还可以像这样为只读创建绑定:

ko.bindingHandlers['readonly'] = {
'update': function (element, valueAccessor) {
    var value = ko.utils.unwrapObservable(valueAccessor());
    if (!value && element.readOnly)
        element.readOnly = false;
    else if (value && !element.readOnly)
        element.readOnly = true;
}
};

来源:https ://github.com/knockout/knockout/issues/1100

于 2015-06-21T15:13:33.627 回答
7

Knockout 有一个启用绑定和一个禁用绑定。

我不确定在提出问题时这些是否可用,但任何提及此问题的人都应该知道。

于 2014-01-31T15:08:22.050 回答