围绕一个独特的backbone.js集合包裹我的头

时间:2012-12-04 14:50:44

标签: backbone.js kendo-ui backbone-collections

我正在制作我的第一个backbone.js应用程序并且遇到了一些问题。也许有人可以帮助我克服这个障碍(我理解的差距)。我想要/需要做的是将收集数据返回到我的路由器,所以我可以将它绑定到Kendo UI Grid,但我没有在我的收藏中看到任何搜索结果...我想我必须是缺少一些基本的东西,但我不确定它是什么。

这是我到目前为止所做的:

    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'
        });

1 个答案:

答案 0 :(得分:2)

这里有一些问题:

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

    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("reset")事件来处理结果:

    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);
        }
    });