如何使用requirejs覆盖供应商库

时间:2015-10-16 08:04:09

标签: javascript backbone.js module requirejs marionette

我使用Marionette.js框架,我需要覆盖Marionette.TemplateCache模块的函数,但不更新marionette.js文件。 所以,我为此创建了一个新模块:

    define(['marionette'], function (Marionette) {
    'use strict';

    _.extend(Marionette.TemplateCache.prototype, {
        loadTemplate: function(templateId){

            var template = templateId;

            if (!template || template.length === 0){
                throwError("Could not find template: '" + templateId + "'", "NoTemplateError");
            }

            return template;
        }
    });
    return Marionette;
});

但是,我不知道如何配置我的requirejs main,因为当我加载Marionette.js框架时,我的模块覆盖了Marionette.js。

你有什么想法怎么做?

感谢。

乔纳森。

1 个答案:

答案 0 :(得分:2)

您可以将为原始库定义的路径重命名为marionette-core,并按以下步骤更新模块

define(['marionette-core'], function (Marionette) {
'use strict';

   _.extend(Marionette.TemplateCache.prototype, {
    loadTemplate: function(templateId){

        var template = templateId;

        if (!template || template.length === 0){
            throwError("Could not find template: '" + templateId + "'", "NoTemplateError");
        }

        return template;
    }
  });

  return Marionette;
});

现在将模块的路径定义为marionette

现在,当您需要marionette时,require.js将加载原始marionette并返回您的自定义实例。

另外,如果需要,您仍然可以使用marionette-core在其他地方加载原始库