淘汰赛ATTR与像“只读”和“禁用”属性绑定(Knockout attr binding with

2019-07-17 20:37发布

有什么建议的“最佳实践”的方式来使用淘汰赛的“ATTR”数据中包含“只读”“禁用”独立属性绑定

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

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

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

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

淘汰赛的“ATTR”数据绑定不支持此方案。 只要我提供一个属性的名字,我需要提供一个值,以及:

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

是否有一个跨浏览器的方式关闭“已禁用”或“只读”? 或者是有一个自定义绑定 ,我可以用它来无法呈现任何东西 ,如果我不希望禁用的项目或者定制只读一招?

Answer 1:

淘汰赛的“ATTR”数据绑定不支持此方案只是返回nullundefinedgetDisabledState()函数,那么它也不会发射属性。

演示小提琴 。



Answer 2:

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

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



Answer 3:

淘汰赛有一个启用绑定,以及一个禁用绑定。

我不知道这是否是可用的时候有人问,但任何人都回头参考这个问题应该知道。



文章来源: Knockout attr binding with attributes like 'readonly' and 'disabled'