如何构建一个rxjs应用程序?有大约100个玩具介绍示例,但没有一个完整的应用程序示例,其中包含小部件、子小部件等,显示整个应用程序中的数据流。
例如,假设你有一个具有某种状态的可观察对象。您需要将其传递给一个小部件。该小部件具有需要该状态的某些部分的子小部件。你订阅了吗?
sub = state.subscribe(widget)
现在'widget‘已经在monad之外了。子小部件不能在状态上使用可观察的方法。如果将小部件作为副作用运行,您也会遇到同样的问题。
state.doAction(widget)
那么,您是否将流传递给widget?如果是这样,你会得到什么回报?
what = widget(state)
小部件是否订阅状态并返回一个可处理的?它是否返回从state派生的流?如果是这样的话,里面有什么?您是否尝试广泛使用selectMany(identity)从所有小部件/子小部件/子子小部件收集所有流,以获得您订阅的最终应用程序流,从而启动整个过程?
如果小部件根据状态按需创建子小部件,那么小部件如何管理其子小部件?我一直在尝试使用groupBy()解决方案,每个子部件都有一个组,但是管理从嵌套的observable返回的所有订阅或流是一场令人难以置信的噩梦。
即使是整个应用程序的一个示例也会很有帮助。
发布于 2014-03-01 00:57:58
将可观察值作为参数传递给小部件的构造函数,并在将其传递给子小部件构造函数之前,让小部件使用额外的monad进行订阅或转换。该小部件将管理其自己的订阅。
如果小部件产生数据(例如用户输入),则在小部件上将其公开为可观察的属性。
请注意,小部件本身不是可观察流的一部分。它们只是使用输入流并产生输出流。
// main app
var someState = Rx.Observable....;
var someWidget = createSomeWidget(someState, ...);
var s = someWidget.userData.map(...).subscribe(...);
// SomeWidget
var SomeWidget = function ($element, state, ...) {
this.userData = $element
.find("button.save")
.onAsObservable("click")
.map(...collect form fields...);
// we need to do stuff with state
this.s = state.subscribe(...);
// we also need to make a child widget that needs some of the state
// after we have sanitized it a bit.
var childState = state.filter(...).map(...)...;
this.childWidget = new ChildWidget(childState, ...);
// listen to child widgets?
}
诸若此类。如果您正在使用Knockout,则可以利用ko.observable
创建双向可观察的流,有时还可以避免在小部件上添加输出属性,但这是另一个主题:)
https://stackoverflow.com/questions/22072974
复制相似问题