【问题标题】:Load textext.js plugin with require.js使用 require.js 加载 textext.js 插件
【发布时间】:2015-03-11 14:48:03
【问题描述】:

我正在尝试使用其中一个插件 textext tags 加载 textext.js jquery 插件。在我的项目中,我使用 require.js 来加载所有脚本及其依赖项。

与其他脚本一样,我在 main.js 文件中使用了 shim 配置:

ma​​in.js

require.config({
  shin: {
    jquery: {
      exports: '$'
    },
    'textext': {
      deps: ['jquery'],
      exports: '$.fn.textext'
    },
    'textext_tags': {
      deps: ['jquery', 'textext'],
    }
  },
  paths: {
    jquery: 'lib/jquery-min',
    textext: 'lib/textext/textext.core',
    textext_tags: 'lib/textext/textext.plugin.tags',
    }
  });

在我使用它的页面上,我如上所说:

file-app.js

define([
  'jquery',
  'textext',
  'textext_tags',
  ], function($, Textext, TextextTags) {
    // do stuff
  });

代码在 firefox 上加载并正常工作,但在 Chromium 上,有时(大约 2/3 的时间),在我第一次加载页面时,我收到以下错误,这破坏了功能页面:

TypeError: Cannot set property 'TextExtTags' of undefined
   #3 localhost/js/lib/textext/textext.plugin.tags.js:23:27

在文件 textext.plugins.tags.js 中,我们在第 23 行(失败行):

$.fn.textext.TextExtTags = TextExtTags;

所以,用 Firebug 检查它,我意识到 Jquery 没有加载,所以 $$.fn 是未定义的。

我的问题是:为什么这个 require.js 架构可以与同一个项目中的其他 jQuery 插件(如 jquery cookie 等)一起使用,但不能与这个带有它的子插件的 jquery 插件一起使用?

【问题讨论】:

  • 不应该是shim 而不是shin。可能这应该是不遵循依赖项的原因,并且 textExtTags 有时会在 textExt 之前被下载,并且您会收到该错误。

标签: javascript jquery jquery-plugins requirejs jquery-textext


【解决方案1】:

正如 Vishwanath 所说,只有从“shin”变为“shim”才有效,就像上面一样:

require.config({
  shim: {
    jquery: {
      exports: '$'
    },
  ...

谢谢!

【讨论】:

    最近更新 更多