0

ルートに行くときに「ハングマン」機能をトリガーするのに問題があります

アプリケーション.js

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

console.log(router) の 'router' 変数を調べると、ルーター オブジェクトにハングマン関数が作成されていることがわかります。

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

ただし、localhost:3000/hangman に移動すると、アラートが呼び出されません。私が間違っているかもしれないことを提案できますか?Rails アプリでバックボーンを使用しています。Rails ルーター ファイルで localhost:3000/hangman が定義されているため、Backbone が Rails ルートをどのように認識しているかよくわかりません。バックボーン ルートをアクティブにするために localhost:3000/hangman/#hangman を実行する必要があるのではないかと考えましたが (レール ルートは関係ありません)、それもうまくいきませんでした。

router.js

$(function() {

  window.Router = Backbone.Router.extend({

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

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

  });

});
4

1 に答える 1

0

細かいRouter#extendマニュアルから:

拡張する Backbone.Router.extend(properties, [classProperties])

[...] ルート定義で先頭のスラッシュを使用しないようにする必要があることに注意してください。

pushStateオプションにも興味があるかもしれません:

start Backbone.history.start([options])
[...]アプリケーションで
HTML5 サポートを使用したいことを示すには、 .pushStateBackbone.history.start({pushState: true})

最初にルートを修正します。

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

そして、(ではなく)動作させるために使用pushState: trueします:/hangman/#hangman

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

于 2013-01-06T20:33:11.457 に答える