集成rails和骨干路由

时间:2013-01-06 19:33:14

标签: ruby-on-rails backbone.js

当我去路线时,我无法触发“刽子手”功能

的application.js

var init = function(){
  console.log("init called");      #logged
  var router = new Router();
  console.log(router);
  Backbone.history.start();
};

当我检查console.log(路由器)中的'router'变量时,它显示在路由器对象上创建了hangman函数

child
__proto__: ctor
constructor: function (){ return parent.apply(this, arguments); }
hangman: function () {
routes: Object
/hangman: "hangman"
__proto__: Object
__proto__: Object

但是,当我导航到localhost:3000 / hangman时,警报未被调用。你能说出我可能做错了吗?我在Rails应用程序中使用骨干。我不太了解Backbone如何理解Rails路由,因为localhost:3000 / hangman在我的rails路由器文件中定义。我想我可能要做localhost:3000 / hangman /#hangman以激活骨干路由(rails路由无关紧要),但这也不起作用。

router.js

$(function() {

  window.Router = Backbone.Router.extend({

    routes: {
    '/hangman' : 'hangman'
  },

    hangman: function() {
      console.log("hangman called");      #never logged
      alert("hangman");
  }

  });

});

1 个答案:

答案 0 :(得分:0)

来自fine Router#extend manual

  

延伸 Backbone.Router.extend(properties, [classProperties])

     

[...]请注意,您要避免在路径定义中使用前导斜杠:

您可能也对pushState option感兴趣:

  

开始 Backbone.history.start([options])
  [...]
  要表明您希望在应用中使用HTML5 pushState支持,请使用Backbone.history.start({pushState: true})

首先修复你的路线:

routes: {
    'hangman' : 'hangman' // No more leading slash.
}

然后使用pushState: true/hangman(而不是/#hangman)工作:

Backbone.history.start({pushState:true});