javascript - Cycle.js 应用程序未捕获的类型错误

标签 javascript html rxjs cyclejs

我正在尝试学习 Cycle.js 并且必须说我发现它非常有趣。我正在尝试创建一个简单的应用程序,其中我有一个 input 和一个 ul。每次向 input 写入一些值并按下 enter 我想添加一个新的 li 并将值添加到 ul,但它失败了出现以下错误。

Uncaught TypeError: observables[_name2].doOnError is not a function

var view = function (state) {
    return CycleDOM.body([
        CycleDOM.input({ type: 'text', value: '' }),
        CycleDOM.ul({ className: 'text' },
            state.map(function (value) {
                CycleDOM.li({ innerText: value });
            }))
    ]);
};

var intent = function (DOM) {
    return DOM.select('input[type=text]').events('keydown').filter(function (ev) {
        return ev.which == 13 && ev.target.value.trim().length > 0;
    }).map(function (ev) {
        return ev.target.value;
    });
};

var model = function (action) {
    return action.startWith('');
};

var main = function (sources) {
    var actions = intent(sources.DOM);
    var state = model(actions);
    var sinks = {
        DOM: view(state)
    };
    return sinks;
}

var drivers = {
    DOM: CycleDOM.makeDOMDriver(document.body)
};

Cycle.run(main, drivers);

最佳答案

首先,很高兴看到人们对 Cycle 感兴趣!

您在这里遗漏了一些要点,这就是您遇到困难的原因。

您可能还没有完全理解响应式编程的概念。你应该阅读 The introduction to Reactive Programming you've been missing由 Cycle and watch 的创造者 his videos about Cycle .它们确实有助于了解 Cycle 的内部工作原理。

此外,您可以采用 Cycle 的命名约定,这确实很有帮助。 stream/observable 应该以 $ 结束,比如

var click$ = DOM.select('a').events('click');

正如@juanrpozo 所说,您的主要问题出在您的view 函数中,因为它返回一个虚拟树而不是虚拟树的可观察对象。 同样重要的是,您了解 state 变量是可观察的,而不是 javascript 数组。这就是为什么我认为您对 Rx 还不满意。您认为您正在映射一个数组,但实际上您映射的是一个可观察对象,因此返回另一个可观察对象,而不是一个数组。 但由于 DOM 接收器应该是可观察的,这很完美,您只需将 VTree 包装在 map 中:

var view = function (state$) {
    return state$.map(function (values) {
        CycleDOM.body([
            CycleDOM.input({ type: 'text', value: '' }),
            CycleDOM.ul({ className: 'text' }, values.map(function (value) {
                CycleDOM.li(value);
            }))
        ])
    };
}

另一个问题是您的state$ 管理。您必须了解 state$ 是组件的连续状态流。在 stackoverflow 上很难对此进行解释,但如果您阅读/观看我发送给您的资源,您将毫无问题地理解它。

我造就了你a jsbin of your code一旦更正并稍作更改以更加尊重 Intent/Model/View 约定。

您还有其他错误,但这些是最重要的。

关于javascript - Cycle.js 应用程序未捕获的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35651672/

相关文章:

javascript - 旋转对象 onclick

javascript - 自定义 CSS 网格布局

JavaScript 按钮,在我点击之前将我带到文档中

redux - 从 Redux Observable 返回一个 Promise

angular - 将 Promise 转换为 RxJs Observable

javascript - 然后服务 worker 注册 - 未定义不是一个函数

html - 固定标题导航链接滚动出标题问题

javascript - 无法取消选中复选框 (HTML)

html - CSS 已加载但未应用

error-handling - 在合并的可观察对象上捕获错误,并在RxJS中继续其他错误