对于我正在构建的Web应用程序,我真的很想通过对象树进行递归并动态修改节点。有一个underscore mixin承诺,underscore.loop,但我似乎无法将其拉入我的页面。我收到一个脚本错误:
未捕获的TypeError:无法调用未定义的方法'mixin'
现在,在underscore.loop.js
和backbone.js
之后,underscore-data.js
被拉入。
尝试underscore.loop
后,Underscore绝对可用。
那么为什么不能underscore.loop.js
看到下划线。它使用与underscore-data.js
几乎相同的作用域和初始化语义。任何人都可以对此有所了解吗?
答案 0 :(得分:1)
在underscore.loop和you'll see this的源代码中稍微高一点:
var RecursiveCall, flatStackLoop, _;
var __slice = Array.prototype.slice;
try {
_ = require('underscore');
} catch (_e) {}
注意var ... _;
以及如何初始化_
。因此underscore.loop.js
正在尝试确保加载underscore.js
并且要使用_
的本地版本。 require
is a node.js-ism所以你没有在客户端世界中拥有它,并且在_
中留下了未定义的值。您可以抓住client-side library that supplies a node.js compatible require:
或修改underscore.loop.js
的副本,使其不包含var _;
声明或try
块。或者,您可以通过以下方式实现自己的require
实现:
function require(what) {
return what == 'underscore' ? window._ : null;
}
甚至:
function require(ignored) { return window._ }
并在require
和underscore.js
之间加载underscore.loop.js
黑客。