Ответ 1
Связывание данных с нокаутом "attr" поддерживает этот сценарий, просто верните null
или undefined
из вашей функции getDisabledState()
, тогда он не будет генерировать атрибут.
Демо Fiddle.
Какая предлагаемая "наилучшая практика" способ использования привязки данных 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'? Или есть трюк с настраиваемой привязкой, которую я могу использовать, чтобы не отображать ничего, если я не хочу, чтобы элемент был отключен или был доступен только для чтения?
Связывание данных с нокаутом "attr" поддерживает этот сценарий, просто верните null
или undefined
из вашей функции getDisabledState()
, тогда он не будет генерировать атрибут.
Демо Fiddle.
Вы также можете создать привязку для 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;
}
};
У нокаута есть привязка enable, а также привязка disable.
Я не уверен, были ли они доступны, когда был задан вопрос, но кто-то, ссылаясь на эту проблему, должен знать.