首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何构造rxjs代码

如何构造rxjs代码
EN

Stack Overflow用户
提问于 2014-02-27 23:28:46
回答 1查看 2.7K关注 0票数 18

如何构建一个rxjs应用程序?有大约100个玩具介绍示例,但没有一个完整的应用程序示例,其中包含小部件、子小部件等,显示整个应用程序中的数据流。

例如,假设你有一个具有某种状态的可观察对象。您需要将其传递给一个小部件。该小部件具有需要该状态的某些部分的子小部件。你订阅了吗?

sub = state.subscribe(widget)

现在'widget‘已经在monad之外了。子小部件不能在状态上使用可观察的方法。如果将小部件作为副作用运行,您也会遇到同样的问题。

state.doAction(widget)

那么,您是否将流传递给widget?如果是这样,你会得到什么回报?

what = widget(state)

小部件是否订阅状态并返回一个可处理的?它是否返回从state派生的流?如果是这样的话,里面有什么?您是否尝试广泛使用selectMany(identity)从所有小部件/子小部件/子子小部件收集所有流,以获得您订阅的最终应用程序流,从而启动整个过程?

如果小部件根据状态按需创建子小部件,那么小部件如何管理其子小部件?我一直在尝试使用groupBy()解决方案,每个子部件都有一个组,但是管理从嵌套的observable返回的所有订阅或流是一场令人难以置信的噩梦。

即使是整个应用程序的一个示例也会很有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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创建双向可观察的流,有时还可以避免在小部件上添加输出属性,但这是另一个主题:)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22072974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档