围绕一个独特的backbone.js集合

围绕一个独特的backbone.js集合,backbone.js,kendo-ui,backbone.js-collections,Backbone.js,Kendo Ui,Backbone.js Collections,我正在开发我的第一个backbone.js应用程序,遇到了一些麻烦。也许有人能帮我克服这个障碍(我理解上的差距)。我想要/需要做的是将收集的数据返回到我的路由器,这样我就可以将其绑定到剑道UI网格,但我在我的收集中没有看到任何搜索结果。。。我想我一定错过了一些基本的东西,但我不确定是什么 以下是我到目前为止的情况: ES.Router = Backbone.Router.extend({routes: { '': 'search', 'se

我正在开发我的第一个backbone.js应用程序,遇到了一些麻烦。也许有人能帮我克服这个障碍(我理解上的差距)。我想要/需要做的是将收集的数据返回到我的路由器,这样我就可以将其绑定到剑道UI网格,但我在我的收集中没有看到任何搜索结果。。。我想我一定错过了一些基本的东西,但我不确定是什么

以下是我到目前为止的情况:

    ES.Router = Backbone.Router.extend({routes: {
            '': 'search',
            'search': 'search',
            'results': 'results'
        },
        results: function() {
            var resultsData = new ES.Results();
            var boo = resultsData.fetch({
                    data: JSON.stringify({"query":"myquery"}),
                    type: 'POST',
                    contentType: 'application/json'
                    });
            console.log(boo);
        }});

    ES.Result = Backbone.Model.extend();

    ES.Results = Backbone.Collection.extend({   
        model: ES.Result,
        url: '/search/query'
        });

这里有几个问题:

  • fetch应该是GET,而不是POST,因为fetch不应该保存或修改任何内容
  • 也许只是个人喜好,但我希望将
    url
    作为一个函数,以避免试图手动修改AJAX请求选项
  • fetch
    调用始终是异步的,因此您需要在选项哈希中添加一个
    success
    回调,或者向集合的
    reset
    事件添加一个侦听器
  • 我会这样写我的收藏:

    ES.Results = Backbone.Collection.extend({   
        initialize: function() {
            this.query = "test";
        },
        model: ES.Result,
        url: function() {
            return '/search/query?query=' + this.query;
        }
    });
    
    然后在创建集合时设置搜索:

    var resultsData = new ES.Results();
    resultsData.query = "soccer";
    
    并使用
    success
    和/或
    on(“重置”)
    事件来处理结果:

    resultsData.on("reset", function(collection) {
        console.log(collection);
    });
    
    console.log("Fetching....");
    resultsData.fetch({
        success: function(collection, response) {
            console.log("Got data!" + collection.length);
        },
        error: function(collection, response) {
            console.log("Error: " + response.responseText);
        }
    });
    

    为什么不尝试按指定的方式放置
    success
    error
    回调,并尝试调试并查看它执行的回调。它会给你一个关于它的想法。如果它进入
    错误
    回调,请确保您的服务器返回正确的响应,它应该是一个
    JSON模型数组
    boo
    将是一个
    jqXHR
    ,记录
    resultData
    将为您提供收集。感谢您的帮助。这是我丢失的一块。至于POST vs.GET,我不知道为什么不使用POST。有些POST数据(查询字符串)可能很长。@Charles我想可能不需要执行Get。这只是REST模型的标准,主干使用(默认情况下)Get=fetch、Post=save和Put=update。