要使用Backbone在Require.js define()中包含哪些内容?

时间:2013-06-13 09:41:32

标签: backbone.js requirejs

我在/utils/routerExtend.js中有这个文件:

(function() {
  _.extend(Backbone.Router.prototype, Backbone.Events, {
    before: function() {},
    after: function() {},
    route: function(route, name, callback) {
      Backbone.history || (Backbone.history = new Backbone.History);
      if (!_.isRegExp(route)) route = this._routeToRegExp(route);
      if (!callback) callback = this[name];
      Backbone.history.route(route, _.bind(function(fragment) {
        var that = this;
        var args = this._extractParameters(route, fragment);
        if (_(this.before).isFunction()) {
          this.before.apply(this, args);
        }
        if (callback) callback.apply(that, args);
        if (_(this.after).isFunction()) {
          this.after.apply(this, args);
        }
      }, this));
    }
  });
}).call(this);

现在,我不再需要了(事实上,从未使用过它,只是了解它对我的应用程序的使用/优势),我是否必须每次都将它与Backbone一起包含在内我这样做:

define(["backbone", "/utils/routerExtend.js"], function(Backbone, ???) {

以上是否正确?

另外,如何让我的routerExtend.js成为一个真正的模块?不幸的是,为了开始这个而苦苦挣扎......

2 个答案:

答案 0 :(得分:1)

是的,您必须在使用index.html的每个文件中包含此内容。

define(["backbone", "/utils/routerExtend.js"], function(Backbone, ???) {

???将是/utils/routerExtend.js在该文件中使用的任何var 像这样可能:

define(["backbone", "/utils/routerExtend.js"], function(Backbone, RouterExtend) {

上面的代码将会在变量RouterExtend中加载/utils/routerExtend.js脚本然后你可以在任何你想使用的文件中的任何地方使用RouterExtend var /utils/routerExtend.js.

答案 1 :(得分:0)

您可以在配置中设置deps。所以像这样:

var require = {
  paths: {
    jquery: 'lib/jquery',
    underscore: 'lib/underscore',
    backbone: 'lib/backbone'
  },
  shim: {
    backbone: {
      deps: ['jquery', 'underscore']
      exports: 'Backbone',
      init: function($, _){
        var Backbone = this.Backbone;
        _.extend(Backbone.Router.prototype, Backbone.Events, {
          // your setup code here
        })
        return Backbone;
      }
    }
  }
}

此处有更多详情:http://requirejs.org/docs/api.html#config-shim

另一种方法是在mybackbone.js中创建自己的“骨干模型”:

define(["backbone"], function(Backbone) {
  _.extend(Backbone.Router.prototype, Backbone.Events, {
    // your setup code here
  });
  return Backbone
});

然后在项目中使用mybackbone而不是原始项目。