How to bind external methods in Router.routes in Backbone.js

Can I associate methods with another object on the Router.routes map ?

I have all the "logic code" inside the Views , and I would like to avoid defining methods in Router .

For example, I have this:

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

I would like to do something like this:

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

early

+3
source share
4 answers

Here's a fairly simple way to accomplish what you want:

  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 , . , , , , , ( ) .

+4

, ...

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 .

+2

, -, ? . . :

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

! , . ,

0
source

All Articles