5

オブザーバブルを持つ単純なモデル クラスがあります。そのセットを購読したいだけです。これが私が持っているコードです:

var dto = function (data) {
    var self = this;
    self.Value1 = ko.observable(data.Value1);
    self.Value1.subscribe(function(){
         console.log('here');
    });   
};

Value1 が最初に設定されたときに console.log が呼び出されない (つまり、ko.observable(data.Value1)

サブスクライブ機能が初期時と変更時の両方で発生するように設定するにはどうすればよいですか。

4

4 に答える 4

14

subscribe初期値の関数をトリガーするための実際のサポートはありません。

あなたができることは、valueHasMutatedあなたの後に関数を呼び出すことですsubscribe:

self.Value1.subscribe(function(){
     console.log('here');
}); 
self.Value1.valueHasMutated();

または、サブスクライブした後に初期値を設定することもできます。

var dto = function (data) {
    var self = this;
    self.Value1 = ko.observable(); // only declare but not assign
    self.Value1.subscribe(function(){
         console.log('here');
    });   
    self.Value1(data.Value1); // assign initial value
};
于 2014-01-02T07:30:59.640 に答える
0

私は自分の使用のためにこれを書いています:

koSubscribe = function(observable, callback){
    observable.subscribe( callback );

    if (observable()) {
        observable.valueHasMutated();
    }
}

ここでの他の回答に基づいています。しかし、「まだ設定されていない場合はどうなるか」という問題を修正します。したがって、これはオブザーバブルが存在する限り機能するはずです。

使用法: koSubscribe(value1, function() {…});value1 はko.observableです。

于 2014-03-31T13:20:05.883 に答える
0

私はsubsribe functionそのように動作することはないと思います。observableつまり、オブジェクトが変更されたときにコールバック/ロジックを実行するときに使用します。

@RP Niemeyerからの回答はこちら:

再評価する必要があることをサブスクライバーに通知するには、valueHasMutated()監視可能なオブジェクトで使用できます

于 2014-01-02T10:30:49.163 に答える