0

我在 /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);

现在,我是 Require 的新手(事实上,从未使用过它,只是了解它对我的应用程序的使用/优势),每次执行此操作时我是否必须将其与 Backbone 一起包含在内:

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

以上是正确的吗?

还有,我如何让我的 routerExtend.js 成为一个实际的模块?不幸的是,努力开始这件事......

4

2 回答 2

1

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

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

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

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

上面这行的作用是它将 /utils/routerExtend.js 脚本加载到变量 RouterExtend 中,然后您可以在该文件中的任何位置使用 RouterExtend var,只要您想使用 /utils/routerExtend.js。

于 2013-06-21T07:14:20.233 回答
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 而不是原来的。

于 2013-06-13T17:58:35.913 回答