javascript - 如何解决 Handlebars.js 缺少 noConflict 方法的问题?

标签 javascript requirejs handlebars.js

我正在使用 Backbone.js 和 Handlebars.js 创建一个 Web 应用程序(Underscore.js 和 jQuery 作为 Backbone 的依赖项)。我正在使用 requirejs 为应用程序加载模块。

按照此处的说明操作:

http://requirejs.org/docs/jquery.html#noconflictmap

这里:

http://requirejs.org/docs/api.html#config

所以我的 requirejs 配置看起来像:

  map: {
    '*' : { 'jquery': 'jquery-private' },
    'jquery-private': { 'jquery': 'jquery' }
  },
  shim: {
    'underscore' : {
      exports: '_',
      init: function() { return this._.noConflict(); }
    },
    'backbone'   : {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone',
      init: function(_, $) {
        // need to manually set Backbone.$ since it looks for it on the global object
        this.Backbone.$ = $;
        return this.Backbone.noConflict();
      }
    },
    'handlebars' : { exports: 'Handlebars' }
  }

我正在通过调用 noConflict() 加载依赖项的本地副本在主干、下划线和 jquery 上。但是,Handlebars 没有 noConflict方法;如果我尝试以与 backbone & underscore 相同的方式为它配置 shim,我会得到一个错误:

Uncaught TypeError: Object #<c> has no method 'noConflict'

这并不奇怪,但我担心冲突!有解决方法吗?我可以通过编写自己的 noConflict 版本以某种方式手动实现相同的目标吗? Handlebars ?那会是什么样子?

最佳答案

据我了解,noConflict 的目的是释放一些命名空间(或者换句话说,全局变量)。我认为,您可以通过以下方式完成它:

  1. 向 Handlebars 添加一些伪依赖项(它可能是简单的 AMD 模块, 自己写的)
  2. 在 Handlebars shim 配置中,按以下方式使用 init 选项:

handlebars   : {
   deps: ['myFakeModule'],
   init: function(myFakeModule) {
      myFakeModule.Handlebars = this.Handlebars;
      this.Handlebars = undefined;
      return myFakeModule.Handlebars;
   }
}

这是一个理论,有点老套,但它可以解决问题。

关于javascript - 如何解决 Handlebars.js 缺少 noConflict 方法的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21145173/

相关文章:

javascript - Testcafe 客户端功能失败 "An error occurred in ClientFunction code: ReferenceError: _from2 is not defined"

javascript - 让输入过滤所有列

javascript - 在 RxJS 5 中分享重播

javascript - 需要 js jquery 插件

javascript - require-handlebars-plugin 构建错误 - ReferenceError : _ is not defined

javascript - html 似乎无法读取脚本元素

requirejs - Require.js 优化器错误地排序 shim 依赖项

javascript - Webpack 库间依赖如 requireJS.config.shim 中

handlebars.js - 如何在 Ghost 博客的帖子中实现过滤

ember.js - emberjs 中表单输入控件的可重用布局