9

これは、ルートがわずかしかないオブジェクトをapplication-router.js作成しているファイルです。Backbone.Router

var App = App || {};

App.Router =  Backbone.Router.extend({
    routes : {
        ''      : 'showDashboard', // Not shown
        '*other': 'showModalError'
    },
    defaultRoute : function(other) { $('#modal404').modal(); }
});

メインの JavaScript ファイルapplication.jsで、プログラムでルートを追加したいと思います。route()関数を試してみましたが、機能しません。ルートが追加されません。ただし、オブジェクトを「コンストラクター」に渡すと機能しますが、既に定義されているルートをオーバーライドします。

// This works and overrides all defined routes in App.Router
var router = new App.Router({ routes : { '/test/me' : 'testRoute' } });

// This is not working
router.route(ExposeTranslation.get('customers.new.route'), 'newCustomer');
router.route('/test/me/again', 'testAgainRoute');

実際console.log(App.Router)に示しています:

routes Object { /test/me="testRoute"}

私は理解できない何かが欠けていると思います.私はこの小さな強力なjavascriptを学び始めています.

4

1 に答える 1

14

あなたのrouter.route通話は機能しています。それらの通話はあなたの問題ではありません。新しいルートを追加するために呼び出すrouteと、新しいルートはルーティング リストの最後に追加されます。特に、route呼び出しによって追加されたルートは追跡され、何'*other''*other'でも一致するため、新しいルートは事実上無視されます。

'*other'からルートを削除して、2 つの呼び出しroutesの後に追加してみてください。route()

routes : {
    ''      : 'showDashboard' // Not shown
},

router.route(ExposeTranslation.get('customers.new.route'), 'newCustomer');
router.route('/test/me/again', 'testAgainRoute');
router.route('*other', 'showModalError');

ルートはApp.Routerオブジェクトに保存されず、内部に保存されますBackbone.history:

route: function(route, name, callback) {
  // ...
  Backbone.history.route(route, _.bind(function(fragment) {
    //...
  }, this));
  return this;
},

それが、あなたconsole.log(App.Router)が有益なことを何も言わない理由です。

于 2012-03-07T03:27:12.793 に答える