kyr*_*isu 6 javascript knockout.js
在我的模型中,我有一个异步加载的属性.我希望它在加载后生成另一个模型属性.
我正在考虑在第一个属性更改后可能触发的订阅,生成第二个属性然后处理 - 我不知道如何从内部处理订阅.
有没有办法在可观察的财产变化后解雇一次事件?
bla*_*icz 24
要从内部处理订阅,只需创建对它的引用:
var subscription = yourObservable.subscribe(function (newValue) {
...
subsription.dispose();
});
Run Code Online (Sandbox Code Playgroud)
如果您不想每次都编写此代码,可以使用新方法扩展observable:
ko.subscribable.fn.subscribeOnce = function (handler, owner, eventName) {
var subscription = this.subscribe(function (newValue) {
subscription.dispose();
handler(newValue);
}, owner, eventName);
return subscription;
};
...
// usage
var subscription = yourObservable.subsribeOnce(yourHandler);
Run Code Online (Sandbox Code Playgroud)
并且不要忘记在未被解雇的情况下处理组件处理的订阅.
您可以编写一个扩展器来抑制除第一次触发之外的所有触发:
ko.extenders.fireOnce= function(target) {
var fired=false;
var result = ko.computed({
read: target,
write: function(newValue) {
var current = target();
if (newValue!== current && !fired) {
fired=true;
target(newValue);
}
}
});
result(target());
return result;
};
Run Code Online (Sandbox Code Playgroud)
然后按如下方式使用它:
var myObservable = ko.Observable(blah).extend({fireOnce:null});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4823 次 |
| 最近记录: |