有人在使用rx.jquery吗?

有人在使用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(并且没有标签),所以我不知道它是否还没有准备好

试着用RxJS,特别是rx.jquery让我的脚湿透。我找到了一个小教程,并尝试如下设置。它应该从维基百科获取你键入的内容并提供建议。调用Wikipedia成功(我在Chrome的网络调试窗口中看到),但该应用程序给了我一个错误:

未捕获的TypeError:对象#没有方法“subscribe”

我已经尝试了几个版本的jQuery(1.8.3、1.10.2、2.0.3),这没有什么区别。引导似乎也不是问题。我在这里几乎没有看到提到rx.jquery(并且没有标签),所以我不知道它是否还没有准备好进入黄金时间。我提取了最新的rx.*libs,因为旧的rx.*libs给了我不同的错误

当然,我不能排除我刚刚搞砸了什么。但它不是冲着我跳

<!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期望某种可观察的集合时,我也看到了这一点,但它只有一个基本的可观察集合。祝你好运