0

監視可能な配列の説明を切り捨てるために使用しているカスタムバインディングがあります。バインディングに返されるテキストを変更するための最善の方法を考えています。

    ko.bindingHandlers.summarize = { 
        init: function(element, valueAccessor, allBindingsAccessor, context) {
            var pattern = new RegExp(/^[^.]+/);
            var summarized = pattern.exec(context.description());
            //How do I set the text to the summarized value?
        }
    }

大まかな説明は、ページの他の場所で使用されます。この切り捨てられたバージョンは、サイドバーで使用されます。これを実行するためのより良い方法についての提案を受け入れますが、これは私にとって最良の方法のように思えました。

viewModelは、マッピングプラグインを介してJSONファイルから生成されます。または、ビューモデルに直接切り捨てられたバージョンを追加します。

物事を見てくれてありがとう。

4

2 に答える 2

3

これが私がしたことです。ノックアウトライブラリのソースを見ると、それは簡単でした。ライブラリコードを掘り下げることを強くお勧めします。それは学習のためにかけがえのないものです。

ko.bindingHandlers.summarize = { 
    init: function(element, valueAccessor, allBindingsAccessor, context) {
    var pattern = new RegExp(/^[^.]+/);
    var summarized = pattern.exec(context.description());
    typeof element.innerText == "string" ? element.innerText = summarized
                                         : element.textContent = summarized;
    }
}

テンプレートで使用するには、次のようにします。

<p data-bind='summarize: description'></p>

説明が観察できる場所。

于 2012-01-17T20:47:14.743 に答える
0

この例では、カスタムバインディングをバインディングステートメントの説明に関連付けているdata-bind='summarize: description'ため、パラメータを使用してvalueAccessor柔軟性を高めることができます。

さらに一歩進んでko.unwrap関数を使用したので、カスタムバインディングは観察できない値も処理できます。

ko.bindingHandlers.summarize = { 
    init: function(element, valueAccessor, allBindingsAccessor, context) {
    var pattern = new RegExp(/^[^.]+/);
    var summarized = pattern.exec(ko.unwrap( valueAccessor() ) );
    typeof element.innerText == "string" ? element.innerText = summarized
                                         : element.textContent = summarized;
    }
}
于 2016-02-25T02:16:49.877 に答える