26

"readonly""disabled"などのスタンドアロン属性でKnockout の "attr" データ バインディングを使用するための推奨される "ベスト プラクティス" の方法は何ですか?

これらの属性は、通常、属性値を属性名に設定することで有効になるという点で特別です (ただし、多くのブラウザーは、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」データ バインディングは、このシナリオをサポートするだけで、関数から返さnullれるか、属性を発行しません。undefinedgetDisabledState()

デモフィドル

于 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

ノックアウトには、有効化バインディングと無効化バインディングがあります。

質問がされたときにこれらが利用可能であったかどうかはわかりませんが、この問題を参照している人は誰でも注意する必要があります.

于 2014-01-31T15:08:22.050 に答える