有人在使用rx.jquery吗?
试着用RxJS,特别是rx.jquery让我的脚湿透。我找到了一个小教程,并尝试如下设置。它应该从维基百科获取你键入的内容并提供建议。调用Wikipedia成功(我在Chrome的网络调试窗口中看到),但该应用程序给了我一个错误: 未捕获的TypeError:对象#没有方法“subscribe” 我已经尝试了几个版本的jQuery(1.8.3、1.10.2、2.0.3),这没有什么区别。引导似乎也不是问题。我在这里几乎没有看到提到rx.jquery(并且没有标签),所以我不知道它是否还没有准备好进入黄金时间。我提取了最新的rx.*libs,因为旧的rx.*libs给了我不同的错误 当然,我不能排除我刚刚搞砸了什么。但它不是冲着我跳有人在使用rx.jquery吗?,jquery,javascript-framework,reactive-extensions-js,rxjs,Jquery,Javascript Framework,Reactive Extensions Js,Rxjs,试着用RxJS,特别是rx.jquery让我的脚湿透。我找到了一个小教程,并尝试如下设置。它应该从维基百科获取你键入的内容并提供建议。调用Wikipedia成功(我在Chrome的网络调试窗口中看到),但该应用程序给了我一个错误: 未捕获的TypeError:对象#没有方法“subscribe” 我已经尝试了几个版本的jQuery(1.8.3、1.10.2、2.0.3),这没有什么区别。引导似乎也不是问题。我在这里几乎没有看到提到rx.jquery(并且没有标签),所以我不知道它是否还没有准备好
<!DOCTYPE html>
<html lang="en">
<head>
<title>Reactive Elements</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes" />
<link href="/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="/lib/jquery-1.8.3.min.js"></script>
</head>
<body>
<div class="container">
<div class="page-header">
<h1>Reactive Extensions <small>in JavaScript</small></h1>
</div>
<input id="textInput" type="text" class="form-control"/>
<ul id="results"></ul>
</div>
<script src="/lib/rx.min.js"></script>
<script src="/lib/rx.binding.min.js"></script>
<script src="/lib/rx.time.min.js"></script>
<script src="/lib/rx.jquery.min.js"></script>
<script>
$(function () {
var throttledInput = $('#textInput').
keyupAsObservable().
map(function (ev) {
return $(ev.target).val();
}).
filter(function (text) {
return text.length > 2;
}).
throttle(500).
distinctUntilChanged();
function searchWikipedia(term) {
return $.ajaxAsObservable({
url: 'http://en.wikipedia.org/w/api.php',
data: { action: 'opensearch',
search: term,
format: 'json' },
dataType: 'jsonp'
});
}
var suggestions = throttledInput.flatMapLatest(function (text) {
console.debug('Searching wiki', text);
return searchWikipedia(text);
});
var selector = $('#results');
suggestions.subscribe(
function (data) {
console.debug('Data!', data);
selector.empty();
$.each(data[1], function (_, text) {
$('<li>' + text + '</li>').appendTo(selector);
});
},
function (e) {
console.debug("ERROR!", e);
selector.empty();
$('<li>Error: ' + e + '</li>').appendTo('#results');
}
);
});
</script>
</body>
</html>
反应元件
JavaScript中的反应式扩展
$(函数(){
var throttledInput=$('#textInput')。
keyupAsObservable()。
地图(功能(ev){
返回$(ev.target).val();
}).
过滤器(函数(文本){
返回text.length>2;
}).
节流阀(500)。
distinctUntilChanged();
功能搜索维基百科(术语){
返回$.ajaxAsObservable({
网址:'http://en.wikipedia.org/w/api.php',
数据:{操作:“opensearch”,
搜索:术语,
格式:'json'},
数据类型:“jsonp”
});
}
var建议=throttledInput.flatMapLatest(函数(文本){
调试('搜索wiki',文本);
返回搜索维基百科(文本);
});
变量选择器=$(“#结果”);
建议。订阅(
功能(数据){
调试('Data!',Data);
selector.empty();
$.each(数据[1],函数(\ux,文本){
$(“”+text+“ ”).appendTo(选择器);
});
},
职能(e){
调试(“错误!”,e);
selector.empty();
$(“错误:“+e+” )。附加到(“#结果”);
}
);
});
您的这一行似乎有错误:
$.each(data[1], function (_, text) { //...
它需要:
$.each(data.data[1], function (_, text) { //...
以匹配传入的数据。以下是工作示例:
$(函数运行(){
var throttledInput=$('#textInput')。
keyupAsObservable()。
地图(功能(ev){
返回$(ev.target).val();
}).
过滤器(函数(文本){
返回text.length>2;
}).
节流阀(500)。
distinctUntilChanged();
功能搜索维基百科(术语){
返回$.ajaxAsObservable({
网址:'http://en.wikipedia.org/w/api.php',
数据:{操作:“opensearch”,
搜索:术语,
格式:'json'},
数据类型:“jsonp”
});
}
var建议=throttledInput.flatMapLatest(函数(文本){
调试('搜索wiki',文本);
返回搜索维基百科(文本);
});
变量选择器=$(“#结果”);
建议。订阅(
功能(数据){
调试('Data!',Data);
selector.empty();
$.each(data.data[1],函数(\ux,文本){
$(“”+text+“ ”).appendTo(选择器);
});
},
职能(e){
调试(“错误!”,e);
selector.empty();
$(“错误:“+e+” )。附加到(“#结果”);
}
);
});代码>
反应元件
JavaScript中的反应式扩展
下面是我对Bacon.js的5分钟转换。似乎有效。美好的也许我只需要学习Bacon而不是Rx。我用Rx的最新版本测试了这段代码,它工作正常(除了$each,它抛出了一个异常)。我能想到的唯一一件事是,一个Rx LIB没有正确加载,或者您可能正在使用一个旧版本,该版本没有您尝试使用的函数之一。没有堆栈跟踪,很难确定,但我通常会看到类似“Uncaught TypeError:Object”的错误,没有方法“subscribe”当RxJS期望是可观察的而不是。我发现有时候你需要在Rx.Observable.return(x)或类似的东西中包装“x”。当RxJS期望某种可观察的集合时,我也看到了这一点,但它只有一个基本的可观察集合。祝你好运