Подтвердить что ты не робот

Нокаут attr с атрибутами, такими как "readonly" и "disabled",

Какая предлагаемая "наилучшая практика" способ использования привязки данных Knockout "attr" с автономными атрибутами, такими как "только для чтения" и "отключена" ?

Эти атрибуты являются особенными в том смысле, что они обычно включаются путем установки значения атрибута для имени атрибута (хотя многие браузеры работают нормально, если вы просто включаете имена атрибутов без каких-либо значений в HTML):

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

Однако, если вы не хотите, чтобы эти атрибуты были применены, общая практика состоит в том, чтобы просто полностью исключить их из HTML (в отличие от того, чтобы делать что-то вроде readonly = "false" ):

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

Связывание данных с нокаутом "attr" не поддерживает этот сценарий. Как только я укажу имя атрибута, мне нужно также указать значение:

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

Есть ли способ перекрестного браузера отключить 'disabled' или 'readonly'? Или есть трюк с настраиваемой привязкой, которую я могу использовать, чтобы не отображать ничего, если я не хочу, чтобы элемент был отключен или был доступен только для чтения?

4b9b3361

Ответ 1

Связывание данных с нокаутом "attr" поддерживает этот сценарий, просто верните null или undefined из вашей функции getDisabledState(), тогда он не будет генерировать атрибут.

Демо Fiddle.

Ответ 2

Вы также можете создать привязку для 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;
}
};

Источник: https://github.com/knockout/knockout/issues/1100

Ответ 3

У нокаута есть привязка enable, а также привязка disable.

Я не уверен, были ли они доступны, когда был задан вопрос, но кто-то, ссылаясь на эту проблему, должен знать.