2013-06-07 4 views
8

ノックアウトエクステンダーを作成した後に観測対象に追加する際に問題があります。次の例では、エクステンダは、値が期待通りに変更されるたびにfooで実行されますが、最初に呼び出されたときにはbarに1回だけ実行されます。マッピング後にノックアウトエクステンダーを適用する

var viewModel = function(){ 
    var self = this; 

    self.foo = ko.observable(1).extend({ numeric: 1 }); 

    self.bar = ko.observable(1); 

    self.bar.extend({ numeric: 1 }); 
}; 

基本的に私は、大規模なJSONオブジェクトをマッピングしていますし、マッピングのプロパティの一部に発生した後にエクステンダーを追加したいと思います。これを行う簡単な方法はありますか?以下は

は、問題を示すjsfiddleです:

http://jsfiddle.net/LgxTn/

答えて

8

あなたは持っている問題は、エクステンダーは、(それが拡張だ、観察に基づいて)新しい観測可能を作成しているということです。そして、新しい観測値は、extendへの2回目の呼び出しで使用されていません。この問題を解決するには

(エクステンダーのコードを変更せずに)あなたはそれはと呼ばれる同じプロパティにextendを呼び出すから応答を割り当てることができます。言い換えれば

、この持つためにあなたの最後の行の前にself.bar =を追加します。

self.bar = self.bar.extend({ numeric: 1 }); 
+0

このソリューションは、テンプレートサブ観測のための再レンダリングに反応しません。このhttp://knockoutjs.com/documentation/extenders.html実例2を試してみてください。 – hawk

+0

あなたは何を意味するのか分かりません。 OPと私は、そのドキュメンテーションページに掲載されている同じ 'ko.extenders.numeric'でコードをベースにしていました。あなたのアプローチが私のものと大きく異なる場合は、新しい回答を投稿してください。 –

+0

多分私は何かを誤解しているかもしれませんが、これは期待どおりに動作しません。http://jsfiddle.net/BqXed/ – hawk

関連する問題