将 json 数据加载到 CycleJS 应用程序中
Loading json data into CycleJS app
我试图围绕CycleJS进行思考,但我被卡住了!我正在尝试将一个小应用程序放在一起,该应用程序加载包含对象数组的 JSON 文件,但我无法让该应用程序执行 http 请求
到目前为止,在我的代码中
'use strict';
import Rx from 'rx';
import Cycle from '@cycle/core';
import {h, makeDOMDriver} from '@cycle/dom';
import {makeHTTPDriver} from '@cycle/http';
function intent(DOM) {
return {
edit: DOM.select('div')
.events('click')
.map(evt => evt.target.value),
add: DOM.select('div')
.events('click')
.map(evt => evt.target.value)
};
}
function model(actions, response) {
return response
}
function view(state) {
return state.map(item => {
h('div', [
item.map(todo => h('div', todo.title))
])
});
}
function main(sources) {
const URL = 'http://localhost:3000/js/planinator/data.json';
let response = sources.HTTP
.mergeAll()
.map(res => res.body)
.startWith([]);
const actions = intent(sources.DOM);
const state = model(actions, response);
return {
DOM: view(state),
HTTP: Rx.Observable.of(URL)
}
}
Cycle.run(main, {
DOM: makeDOMDriver('#appmount'),
HTTP: makeHTTPDriver()
});
我想要实现的是; 加载 JSON 数据并将其呈现为div 标签。
当我在 chrome 中运行代码时,我在控制台中得到这个
bundle.js:14182 TypeError: Cannot read property 'subscribe' of undefined(…)
我已经检查了stackoverflow找到的问题,但他们没有让我进一步了解
欢迎来到循环.js :)
我注意到的第一个问题是,HTTP 驱动程序首先需要 http 请求的可观察量,目前您只需向它传递一个 url 字符串。这可以通过使用 Rx 的 URL 包装在可观察量中来完成Rx.Observable.of(URL)
function main(sources) {
...
return {
...
HTTP: Rx.Observable.of(URL)
}
}
接下来,我注意到您的request
(实际上是您的响应!(有点滥用HTTP驱动程序。HTTP 驱动程序将高阶可观察量返回回 main,或者换句话说,它返回包含其他可观察量的可观察量。这可以通过mergeAll()
或switch()
轻松纠正。 mergeAll()
和switch()
有效地获取高阶可观察量,并将其"展平"为包含"内部"可观察量事件的可观察量。
let response = sources.HTTP
.mergeAll()
.filter(....)
.map(....)
.startWith([])
这两种方法之间的区别是微妙的,但非常重要。 mergeAll()
具有 Infinity
的并发性。这甚至意味着什么? mergeAll()
将获取所有内部可观察量并订阅它们,并将其事件推送到包含的可观察量,同时永远不会取消订阅。 switch()
类似,但并发性为 1。它只会订阅最新的内部可观察量,同时处理以前的。
我不能确定这回答了你的所有问题,但我希望它至少能让你朝着正确的方向开始! :)
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在phonegap应用程序内部重定向不起作用
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- Node.js正在更改应用程序以使用集群模块
- 在openshift node js应用程序中获取请求
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 将 json 数据加载到 CycleJS 应用程序中