我想利用knockout js的subscribe()函数在某一点手动触发事件。
我可以创建一个observable()并且每次都在那里放置一个GUID来触发scubscribe。
在Knockout js中有一种更清晰的方式可以拥有典型的类似事件的结构吗?
修改 好吧,显然我可以使用observable.valueHasMutated() - 可能已经比使用GUID更清晰。
示例
这是我正在寻找的行为:
function Car()
{
var self = this;
self.onOpenDoor = ko.observable();
self.openDoor = function()
{
// using an observable / valueHasMutated for this feels a bit hacky
// is there an other way to use the underlying subscribe() system?
self.onOpenDoor.valueHasMutated();
}
}
var car = new Car();
// multiple subscribers
car.onOpenDoor.subscribe(function()
{
console.log('Do something');
})
car.o**nOpenDoor.subscribe(function()
{
console.log('Do something else');
})
car.openDoor();
我知道这不是默认的'淘汰'做事的方式 - 这不是这个问题的关键。
更新
在@ RoyJ提到Niemeyer的博客后,我选择了这个解决方案:
function Car()
{
var self = this;
self.onOpenDoor = new ko.subscribable();
self.openDoor = function()
{
self.onOpenDoor.notifySubscribers();
}
}
答案 0 :(得分:2)
更新如果您只是想要明确,可以使用notifySubscribers
代替valueHasMutated
。您可能想要查看observables的基本类型ko.subscribable。
我会这样做:
var vm = {
///...definitions...
openCount: ko.observable(0),
openDoor: function () {
vm.openCount(vm.openCount()+1);
}
};
vm.openCount.subscribe(function () {
///...do something
});
vm.openCount.subscribe(function () {
///...do something else
});
ko.applyBindings(vm);