Backbone路由器监听器没有打哈希标签

时间:2012-10-27 16:17:54

标签: javascript backbone.js router

我的问题是,当我在链接中使用哈希标记时,它只是将哈希附加到网址而不是去路由。例如/ToDo/public/offline2.html#test。如果我离开tag = "",它会因某种原因转到路由器。

我已使用以下代码关闭了jquery移动路由器

<script type="text/javascript">     
  $(document).bind("mobileinit", function () {  
      $.mobile.ajaxEnabled = false;         
      $.mobile.linkBindingEnabled = false;  
      $.mobile.hashListeningEnabled = false;    
      $.mobile.pushStateEnabled = false;        
      $.mobile.changePage.defaults.changeHash = false;
  });

</script>

<script src="../js/jquery.mobile.js"></script>
<script src="../js/jquery.js"></script>

我的html代码是如何非常基本的

<p>go to <a href="#test"  id="#test">test page</a></p>

所以我有一个单独的js文件,其中包含说文件test.js中的javascript代码。这是主要代码

$(app.init)

app.init = function() {
  console.log('start init')

  router = new TestRouter();    
  console.log('end init')
}


var TestRouter = Backbone.Router.extend({           
    routes:{       
        "":"home",  
        "test":"test" 
       },   

          initialize: function(){     var self = this
              _.bindAll(self)       },  
          home: function(){         
              alert(name);  
             // $.mobile.changePage($('#home-page'), {changeHash:false});   
              },        

              test: function (name) {   
                  alert(name);          
                //  $.mobile.changePage($('#test-page'), {changeHash:false});   
                  }     
              })    

正如我所说,代码适用于家庭,当我设置像这样的标签

<a href="" data-icon="home">Home</a>

2 个答案:

答案 0 :(得分:1)

在Backbone开始监视hashchange事件之前,你需要调用Backbone.history.start()。

app.init = function() {
  console.log('start init')

  router = new TestRouter();
  Backbone.history.start();
  console.log('end init')
}

答案 1 :(得分:0)

尝试将$(app.init)移至app.init的函数定义下方。您实际上是在传递jQuery.ready(null),它不会在DOM上调用您的app.init函数。

例如,在下面的snippit中,只有“两个”会被警告,因为alerts.one在传递给jQuery时为null

alerts = {}

$(alerts.one)

alerts.one = function() { alert("one") }
alerts.two = function() { alert("two") }

$(alerts.two)

http://api.jquery.com/ready/