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