0

我正在处理一个内置在 knockout.js 中的模块,我想按照 RxJs、highland.js 或 bacon.js 的方式将对可观察对象的更改映射到事件流上。

我知道有办法通过延长淘汰赛来做到这一点,比如ko.subscribable.fn.someFilter. 但这假设我想让淘汰赛为我做我的工作——我不想,特别是。

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

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

不幸的是,在淘汰赛中,我无法找到一种简单的方法来挂钩事件,因为淘汰赛实现了发布/订阅而不是发射器。关于我如何上钩的任何见解?

我在想像调解器发射器这样的东西,它订阅所有可观察的属性,然后发出事件。

假设我有一个受 ko 视图模型约束的东西:

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

并且视图模型类似于

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

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

4

0 回答 0