3

是否可以从Router.routes映射中的其他对象绑定方法?

我在Views中有所有“逻辑代码” ,我想避免在Router中定义方法。

例如,我有这个:

var app = new (Backbone.View.extend({    
         playHome: function(){
            // logic code here
         }
//..........
});
var router = new (Backbone.Router.extend({
        routes: {
          "play"         : 'playHome'
        },
        playHome: function(){
            app.playHome();
        }

我想做这样的事情:

var router = new (Backbone.Router.extend({
        routes: {
          "play"         : 'app.playHome'
        },

提前致谢

4

4 回答 4

4

这是一个相当简单的方法来完成你想要的:

  var WorkspaceRouter = Backbone.Router.extend({
    routes: {
      "help": "help", // #help
      "search/:query": "search", // #search/kiwis
      "search/:query/p:page": "search" // #search/kiwis/p7
    },

    help : function () { },

    search : function () { }
  });

  var App = {
    help: function() { console.log("help"); },

    search: function(query, page) { console.log("search", query, page); }
  };

  $(document).ready(
      function () {
        var router = new WorkspaceRouter();
        Backbone.history.start();

        router.on("route:help", App.help);
        router.on("route:search", App.search);
      }
  );

该解决方案依赖于 Backbone 为每个路由触发一个事件以及调用路由器本身的函数这一事实。如果您愿意允许路由器上的虚拟函数什么都不做,那么您可以将您喜欢的任何内容附加到路由器的事件并在其他对象上调用任意数量的其他函数,根据需要附加整个事物(或分离它)。

于 2012-05-15T20:55:03.053 回答
2

查看Backbone.Marionette 的 AppRouter .. 它允许您提供一个控制器对象,该对象只需提供所需的路由方法。

于 2012-05-16T10:14:19.093 回答
2

这是完成您正在寻找的另一种方法...

var app = new (Backbone.View.extend({    
    playHome: function(){
        // logic code here
    }
    //..........
});

var router = new (Backbone.Router.extend({
    initialize: function(){
        // route,  route name for event, callback function
        this.route("play", "playRoute", _.bind(app.playHome, app))
    },

app.playHome作为路由的回调函数调用,与回调app绑定this

于 2012-05-21T14:18:39.147 回答
0

我想我在某个地方读到过这个,在哪里?不知道。但是您可以将一流的函数作为值传递给 routes 对象。这边走:

var router = new (Backbone.Router.extend({
    routes: {
      "play"         : app.playHome
    },

虽然没有保证!想知道我在哪里读到的。希望这可以帮助

于 2012-05-09T14:10:15.307 回答