Javascript 在第一组中未调用knockout.js subscribe

Javascript 在第一组中未调用knockout.js subscribe,javascript,knockout.js,knockout-3.0,Javascript,Knockout.js,Knockout 3.0,我有一个简单的模型类,带有可观测项。我只是想订阅它的节目集。以下是我的代码: var dto = function (data) { var self = this; self.Value1 = ko.observable(data.Value1); self.Value1.subscribe(function(){ console.log('here'); }); }; 首次设置Value1时,不会调用console.log(即ko.o

我有一个简单的模型类,带有可观测项。我只是想订阅它的节目集。以下是我的代码:

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))


如何设置subscribe函数在初始值和更改时都会发生。

对于初始值触发
subscribe
函数没有真正的支持

您可以做的是在您的
订阅后调用
值hassmutated
函数:

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
};

我认为
subscribe函数
不允许这样工作。换句话说,当您的
可观察对象发生变化时,当您执行一些回调/逻辑时,可以使用它

发件人:


要通知订阅者他们应该重新评估,您可以在您的可观察对象上使用
valuehassmutated()

我写这篇文章是为了自己使用:

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

    if (observable()) {
        observable.valueHasMutated();
    }
}
它基于这里的其他答案。但是修复了“如果它还没有被设置怎么办?” 因此,只要可观测的存在,这就应该起作用


用法:
koSubscribe(value1,function(){…});
其中value1是一个
ko.observable

以改进richard的回答。如果这是一种反复出现的情况,您不知道一个observable是否已经获得了一个值,但如果已经获得了,您想调用订户,那么您可以使用此函数扩展ko subscribable,该函数具有与原始的相同的签名认购:

ko.subscribable.fn.subscribeAndCall = function(subscribingFunction, context, event) {
  var subscribableValue = this();

  this.subscribe(subscribingFunction, context, event);

  if (subscribableValue !== undefined) {
    subscribingFunction.call(context, subscribableValue);
  }
};
它也适用于虚假的初始值,不会意外触发任何其他可观测的订户

原始问题的用法示例:

self.Value1.subscribeAndCall(function(){
     console.log('here');
}, this);