【问题标题】:Backbone router only triggering first time, not working after resubmit?骨干路由器仅第一次触发,重新提交后不起作用?
【发布时间】:2015-07-08 15:17:35
【问题描述】:

全部,

我正在使用带有“#search”的路由器来启动从另一个视图中获取集合。

**Router code**

    // DesktopRouter.js
    // ----------------
    define(["jquery", "backbone", "views/Page", "views/Form", "views/Results"],

        function ($, Backbone, Page, Form, Results)
        {

            var DesktopRouter = Backbone.Router.extend({

                initialize: function ()
                {

                    // Tells Backbone to start watching for hashchange events
                    Backbone.history.start();

                },

                // All of your Backbone Routes (add more)
                routes: {

                    // When there is no hash on the url, the home method is called
                    "": "index",
                    "search": "search"

                },

                index: function ()
                {
                    console.log("Loading index");
                    // Instantiates a new view which will render the header text to the page
                    new Page();
                    new Form();

                },


                search: function ()
                {
                    console.log("Loading search results view : " + selectedTrade);
                    var selectedTrade = $("#tradesField").val();

                    new Results(selectedTrade) //pass this value to the view which in turn passes to collection to pass in GET

                }

...

表格

使用“#search”操作

 <div class="col-md-3" id="form">
            <p class="lead">Search for Tradesmen</p>
            <div class="form-group">
                <form action="#search">
                    <input id="tradesField" type="text" class="form-control">
                    <input id="searchTrades" type="submit" value="Search" class="btn btn-default form-control" />

                </form>


            </div>
        </div>

第一次提交表单时,它工作正常。但是,我无法在第一次之后重新提交查询并触发该功能。我必须不断刷新页面并删除#search 标签。

我怎样才能让每个表单提交都能正常工作?

【问题讨论】:

    标签: javascript backbone.js backbone-routing


    【解决方案1】:

    route 事件仅在哈希实际更改时发生。第一次提交表单,hash变成#search,触发路由器的route:search事件。但是,第二次提交表单时(假设您事先没有导航到其他地方),哈希值已经是#search,因此没有触发任何事件。

    我从未见过将哈希作为其操作处理程序的表单,但我认为您不会以这种方式成功。您可能需要某种绑定到该元素的视图,如下所示:

    var Search = Backbone.View.extend({
       el: '#id-of-my-form-element',
       events: { 'submit' : 'onSubmit' },
       onSubmit: function(e){
          router.navigate('search', { trigger: true });
       }
    })
    
    var search = new Search;
    

    您还应该将搜索查询添加到哈希中,例如 #search?q=someQuery,以便后退按钮具有预期的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      相关资源
      最近更新 更多