Backbone.js应该从URL获取GET参数吗?

时间:2012-08-07 01:21:39

标签: javascript jquery backbone.js underscore.js

我正在尝试为我的网站实现搜索功能。当用户在foobar框中键入搜索字词input并提交时,系统会将其重定向到http://mydomain.com/search?query=foobar

问题:: 我应该如何从URL中获取GET参数query,并将其发送到后端并以JSON响应的形式获取结果数组?我应该这样做吗?

我下面的当前尝试甚至不会导致search功能被触发。

路由器

var AppRouter = Backbone.Router.extend({
    routes: {
        'search?query=:query': 'search'
        // ... and some other routes
    },

    search: function(query) {
        this.photoList = new SearchCollection();
        var self = this;
        this.photoList.fetch({
            data: {query: query},
            success: function() {
                self.photoListView = new PhotoListView({ collection: self.photoList });
                self.photoListView.render();
            }
        });
    }

});

var app = new AppRouter();
Backbone.history.start({
    pushState: true,
    root: '/'
});

4 个答案:

答案 0 :(得分:5)

针对此问题针对Backbone提出了几个问题。有一个现有的插件适用于此:

https://github.com/jhudson8/backbone-query-parameters

或者,我目前正在模拟API中使用查询字符串参数来匹配Backbone的路由匹配。看起来像这样

<强>路线

"/api/v2/application/:query"

<强>查询

application: function(query) {
  var params = $.deparam(query.slice(1));
  // params.something...
}

关于您手头的实际问题,如何重定向到index.html以支持pushState

答案 1 :(得分:2)

我遇到了同样的问题,并考虑使用骨干查询参数,但这通常被视为不正确的方法。

url查询字符串不适用于前端。当从page.html导航到page.html?something = something。时,它们会被发送到服务器并强制刷新。

您应该使用哈希片段。即http://www.example.com/ajax.html#key1=value1&key2=value2然后只需将这些值作为正常的骨干方式,并从中建立您的请求参数。

请参阅https://github.com/jashkenas/backbone/issues/891https://developers.google.com/webmasters/ajax-crawling/docs/specificationhttp://tools.ietf.org/html/rfc3986#section-3.5

答案 2 :(得分:0)

您始终可以通过jQuery URL插件阅读该网址。效果很好。

https://github.com/allmarkedup/jQuery-URL-Parser

答案 3 :(得分:-1)

当您需要阅读URL并提取GET参数时,极少数情况下。我认为你做错了,这是我的选择:

1)如果您的应用中只有一个页面(单个应用页面),则可以在input字段中输入结果或在submit

之后显示结果

2)如果您要将用户重定向到另一个页面,这意味着您可以bootstrap data,以便在加载页面后backbone只需呈现您的结果,并且只有您提出其他请求更改您的搜索词

3)你可以有一个javascript变量在页面加载时直接从服务器初始化,在那里使用GET参数可能更容易