骨干表单提交路由

时间:2015-07-18 22:11:17

标签: javascript forms backbone.js

是否可以使路由器实现类似于以下内容?

var Router = Backbone.Router.extend({
    routes: {
        '' : 'search',
        '*querystring' : 'results'
    },
    search: function() {
        // load search view
    },
    results: function(querystring) {
        // load search view
        // make ajax request using querystring
    }
});

搜索视图有一个表单,提交时应转到结果视图,该视图将解析查询的URL,提交ajax请求,然后显示响应。

显然这样的事情会更有意义

'results?*querystring' : 'results'

但我无法通过该格式提交表单。

将表单操作设为<form action="index.html/results">时,我会将http://localhost:8000/index.html/results?c=foo&a=bar作为我的网址。

这很接近,但我确实需要http://localhost:8000/index.html#/results?c=foo&a=bar,当我尝试使用<form action="index.html#/results">时,它会给我http://localhost:8000/index.html?c=foo&a=bar#/results这不是我想要的:(

这就是为什么我宁愿没有表单操作,而是有一条路径可以解析查询(如果存在)。

好的,谢谢你的阅读。希望有人了解其中一些并可以帮助我。

2 个答案:

答案 0 :(得分:0)

不要将pushstate设置为true,将其设置为false

Backbone.js PushStates: Fallback for Internet Explorer not working

答案 1 :(得分:0)

  1. 删除表单或阻止提交
  2. 只需获取参数并触发路线
  3. 在触发路线中妥善处理参数。
  4. <强>路由器

    routes:{
      'search':'search'     //queryString is automatically passed as last param in backbone 1.1
    },
    search: function(queryString){
      //Write your logic to do the search
    }
    

    查看:

    events:{
    'submit form':'preventAndNavigate'
    },
    preventAndNavigate: function(e){
      e.preventDefault();
      var query = $(e.currentTarget).serialize();
      Backbone.history.navigate('search?'+query,{trigger:true});
    }
    

    文档:

    Backbone Routers现在处理路径片段中的查询参数,并将它们作为最后一个参数传递给处理程序。指定为字符串的路由不应再包含查询字符串(&#39; foo?:query&#39;应该是&#39; foo&#39;)。

    参考文献:

    http://backbonejs.org/#changelog