3

ノックアウトに精通している誰かが、私がこれを正しい方法で行っているかどうか教えてもらえますか?

foreachディレクティブでfloatleftクラスとfloatrightクラスを交互に追加しようとしています-これが私のバインディングです。私はマークから外れていますか?より良いアプローチはありますか?

<a data-bind="css:{'pull-left':$index()%2 == 0,'pull-right':$index()%2 == 1}, attr:{href:$data.url}">

愛するノックアウト-ところで

どんな助けでも大歓迎です。

4

1 に答える 1

4

あなたがそれをしている方法はうまくいくでしょう。よりクリーンな方法が必要な場合は、適切な値を返す計算されたオブザーバブルをビューモデルに作成するか、このロジックを処理するカスタムバインディングを作成することができます。

インデックスとして使用したいものを渡すことができるカスタムバインディングのサンプルは、次のようになります。

ko.bindingHandlers.float = {
    init: function(element, valueAccessor, allBindings, data, context) {
        var index, floatValue;

        index = valueAccessor();

        floatValue = ko.computed(function() {
           var left = ko.utils.unwrapObservable(index) % 2 === 0; 
           return left ? "left" : "right";
        });

        ko.applyBindingsToNode(element, { 
            style: {
                cssFloat: floatValue
            }                
        });
    }        
};

サンプルは次のとおりです:http://jsfiddle.net/rniemeyer/B8YHc/

ブートストラップのクラスを使用する場合は、http: //jsfiddle.net/rniemeyer/VdLNQ/のように実行できます。左右に浮くだけなので、どちらの方法でも問題ありません。

于 2012-10-09T14:07:21.540 に答える