将敲除可观察的更改映射到事件流

时间:2014-05-28 05:49:45

标签: javascript knockout.js bacon.js highland.js

我正在使用在knockout.js中构建的模块,我希望按照RxJs,highland.js或bacon.js的方式将更改映射到事件流。 / p>

我知道有很多方法可以通过延长淘汰赛来实现这一目标,例如ko.subscribable.fn.someFilter。但这假设我想要淘汰赛为我做我的工作 - 我不是,特别是。

通常在培根或高地你会看到类似的东西:

//bacon
var strm1 = $('#el').toEventStream('click');
strm1.map(transformFn);
//highland
var strm2 = _('click',$('#el'));
strm2.map(transformFn);

不幸的是,在淘汰赛中我无法找到一种简单的方法来挂钩事件,因为knockout实现了pub / sub而不是发射器。有关我如何依赖的任何见解?

我在考虑类似于调解器发射器,它订阅所有可观察的属性,然后发出事件。

假设我有一个像ko viewmodel绑定的东西:

<input data-bind="value:name" />

并且viewmodel类似于

function Person(){
this.name = ko.observable('Bob');
this.age = ko.observable(21);
    //...
};
var person = new Person();
var emitter = Emitter({});
var streams = {};

然后我映射如下,其中_是高地。

for(var key in person){
streams[key]=_(key+':changed',watcher);
person[key].subscribe(function(){
    watcher.emit(key+':changed',arguments);
});
}
function streamHandler(){
console.log('streamHandler got',arguments);
}

一切都很好,我的发射器发射得很好,但是这没有做任何事情:

 streams['name'].each(streamHandler);

所以,我错过了一些东西。怎么了?

0 个答案:

没有答案