Knockout attr绑定与'readonly'和'disabled'等属性

Arm*_*nco 25 html data-binding readonly disabled-input knockout.js

什么是使用Knockout的"attr"数据绑定"readonly""disabled"等独立属性建议的"最佳实践"方法?

这些属性是特殊的,因为它们通常由属性值设置为属性名(虽然很多浏览器正常工作,如果你只是不包含在HTML的任何值的属性名称)启用:

<input type="text" readonly="readonly" disabled="disabled" value="foo" />
Run Code Online (Sandbox Code Playgroud)

但是,如果你不做要应用这些属性,一般的做法是简单地完全从HTML忽略它们(而不是做这样的事情只读="假"):

<input type="text" value="foo" />
Run Code Online (Sandbox Code Playgroud)

Knockout的"attr"数据绑定不支持这种情况.只要我提供属性名称,我还需要提供一个值:

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

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

nem*_*esv 40

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

演示小提琴.

  • 如果getDisabledState()函数返回true/false,则可以使用三元运算符内联,而无需修改函数:<input type ="text"data-bind ="attr:{'disabled':getDisabledState()?'disabled': null}"/>我将获得与返回string或null相同的效果. (3认同)

Gre*_*Gum 9

你也可以像这样为readonly创建一个绑定:

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;
}
};
Run Code Online (Sandbox Code Playgroud)

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


小智 7

Knockout具有启用绑定和禁用绑定.

当问到这个问题时,我不确定这些是否可用,但任何回答这个问题的人都应该知道.

  • !observableProperty()可以工作:)比自定义绑定更快,更清洁 (4认同)