0

我正在开发我的第一个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'
        });
4

1 回答 1

2

这里有几个问题:

  1. 提取应该是 GET,而不是 POST,因为提取不应保存或修改任何内容
  2. 也许只是个人喜好,但我想url作为一个函数,以避免尝试手动修改 AJAX 请求选项。
  3. 调用将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("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);
    }
});

​</p>

于 2012-12-04T17:42:40.423 回答