如何在网页中全局使用underscore.string(使用requireJS)

时间:2017-02-14 18:02:10

标签: requirejs underscore.js underscore.string.js

文档说明一旦我的应用程序中包含了underscore.string,该库可以使用 s __ s 全局变量(http://epeli.github.io/underscore.string/#others)或下划线属性 __。str __。字符串

这个简单的代码应该正常工作(正确设置配置路径):

require(['underscore','underscore.string'], function(){
     console.log(s('test').capitalize().value());
});

但它根本不起作用。这是一个简单的jsfiddle示例。我可能做错了什么,但我无法弄清楚是什么。

https://jsfiddle.net/mvenrtgy/10/

相关的测试代码是:

require.config({
  paths: {
    'underscore':'https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min',
    'underscore.string':'https://cdnjs.cloudflare.com/ajax/libs/underscore.string/3.3.4/underscore.string.min'
  }
});
require(['underscore','underscore.string'], function(){

  var t = 'This is a simple text I would like to SLUGIFY using unsercore.string';

  // underscore is there!
  console.log(typeof _)

  // now check where underscore.string is...
  console.log(typeof _.str);
  console.log(typeof _.string);
  console.log(typeof s);
  console.log(typeof _s);

  document.getElementsByTagName('body')[0].innerHTML = '<p>Sample text : ' + t + '</p>';
  // this line will cause an error
  document.getElementsByTagName('body')[0].innerHTML += '<p><em>Slugified</em> text : ' + s(t).slugify().value() + '</p>';


});

1 个答案:

答案 0 :(得分:0)

underscore.string是一个表现良好的AMD库,因此它不会污染全球空间。您应该更改require调用,以便获取与正在加载的模块对应的参数:

require(['underscore','underscore.string'], function(_, s){

通过对代码进行此更改,我得到了一些有用的东西。测试的第二行显示为:

  

Slugified text :这是一个简单的文本,我想要使用unoccore字符串

此外,虽然underscore.string 已作为underscore扩展程序启动,但它已超出此范围,因此您无法通过_全局underscore全局访问它1}}泄漏到全局空间,除非你负责将其与underscore混合。 documentation表示你可以这样做:

_.mixin(s.exports());

但文档建议不要使用它,因为underscore.string会干扰underscore导出的一些基本功能。使用风险自负。