7

一部の属性では、効果があるのは属性の存在です。属性に割り当てられた値は関係ありません。たとえば、autofocus 属性を「false」、「true」、または「banana」に設定しても、要素は自動的にフォーカスされます。IE、以下はすべて同等であり、div がフォーカスを取得します。

<div autofocus="false" contenteditable="true"></div>
<div autofocus="true" contenteditable="true"></div>
<div autofocus="banana" contenteditable="true"></div>

ノックアウトには「attr」バインディングがありますが、属性の追加/削除ではなく、属性に値割り当てる場合にのみ役立つようです。

ノックアウトでそれを行う別の方法はありますか、それとも JavaScript から設定する必要がありますか?

NBubuntuでchromeを使用しています。

4

4 に答える 4

6

ブール値 false を使用して属性を削除し、文字列「false」を使用して属性を設定します。さらに何が必要ですか?

例えば:

// Set as boolean, removes the attribute
autofocus(false);   

// Set as boolean, adds the attribute
autofocus(true);  

// Set as string, adds the attribute
autofocus('false');   

// Set as string, adds the attribute
autofocus('true');   

例については、こちらを参照してください: http://jsfiddle.net/badsyntax/XMDFh/

于 2013-04-23T11:24:17.467 に答える
1

hasfocusノックアウトバインディングを使用できます。

<input data-bind="hasfocus: isSelected" />

詳細はこちら: http: //knockoutjs.com/documentation/hasfocus-binding.html

于 2012-08-16T14:20:36.397 に答える
0

jquery を使用して属性を削除する kohandler を作成できます。

于 2013-04-22T01:46:00.923 に答える
0

Knockout には、属性を追加または削除するためのネイティブ バインディングはなく、属性を設定するためだけのものです。

hasFocusバインドがその動作を示す理由は、要素のネイティブ メソッド.focus().blur()メソッドを使用してフォーカスを追加または削除するためです。

ブール値以外の属性の管理が困難なノックアウトは以前に報告されています。Michael Best が対処しないと述べた例を次に示します。

https://github.com/SteveSanderson/knockout/issues/391

アップデート:

次の行に沿ってバインディング ハンドラーを作成できます。

ko.bindingHandlers.toggleAttr = {    
    update: function (element, valueAccessor) {    
        var options = ko.utils.unwrapObservable(valueAccessor());
        var attr = ko.utils.unwrapObservable(options.attr);
        var param = ko.utils.unwrapObservable(options.param);

        param ? element.setAttribute(attr, true) : element.removeAttribute(attr);        
    }
};

これにより、次のことが可能になります。

<input data-bind="toggleAttr: { attr: 'autofocus', param: focusMe }" />

ここにフィドルがあります:http://jsfiddle.net/nathanjones/9EzBD/

于 2013-04-22T22:05:32.093 に答える