在 RequireJs 模块中强调 Js mixins
UnderscoreJs Mixins in RequireJs module
为我的应用程序所需的 2 个下划线混合编写了这个 requireJs 模型。我将其添加到require.config并加载了文件,但是当我尝试使用2个函数中的任何一个时,我声明它们是未定义的。我知道我做错了什么,但我不知道是什么。
define(['underscore.mixins'], function (module)
{
require(['underscore'], function (_) {
_.mixin({
'toQueryString': function (parameters) {
var queryString = _.reduce(
parameters,
function (components, value, key) {
components.push(key + '=' + encodeURIComponent(value));
return components;
},
[]
).join('&');
if (queryString.length > 0) {
queryString = '?' + queryString;
}
return queryString;
更新 1:
我修改了它,但它仍然对我不起作用。
我这样做了:
主.js:
require([
'../common/requireConfig'
], function () {
'use strict';
requirejs.s.contexts._.config.paths.chai = 'thirdParty/chai';
requirejs.s.contexts._.config.paths.mocha = 'thirdParty/mocha';
requirejs.s.contexts._.config.paths.sinon = 'thirdParty/sinon';
requirejs.s.contexts._.config.shim.mocha = {
exports: 'window.mocha'
};
requirejs.s.contexts._.config.shim.sinon = {
exports: 'window.sinon'
};
// Then, load all of the plugins needed by test:
require(['test/plugins']);
});
需要配置.js
define(function () {
'use strict';
require.config({
baseUrl: 'js/',
enforceDefine: true,
paths: { ... }
});
require(["underscore", "thirdParty/underscore.mixins"], function (_) {
_.toQueryString({});
});
但是当我调用该函数时:
在模型文件中
requestUrl += _.toQueryString(_.extend({
key: YouTubeAPIKey
}, ajaxDataOptions));'
它仍然未定义
更新 2
通过这样做让它工作:
underscore.mixins.js:
define(['underscore'], function (_) {
_.mixin({
'toQueryString': function (parameters) {
var queryString = _.reduce(
parameters,
function (components, value, key) {
components.push(key + '=' + encodeURIComponent(value));
return components;
},
[]
).join('&');
if (queryString.length > 0) {
queryString = '?' + queryString;
}
return queryString;
},
'fromQueryString': function (queryString) {
return _.reduce(
queryString.replace('?', '').split('&'),
function (parameters, parameter) {
if (parameter.length > 0) {
_.extend(parameters, _.object([_.map(parameter.split('='), decodeURIComponent)]));
}
return parameters;
},
{}
);
}
});
return _;
});
在我实际使用这些函数的文件顶部:
define([
'background/collection/songs',
'background/key/youTubeAPI',
'background/model/song',
'common/enum/songType',
'common/enum/youTubeServiceType',
'common/utility',
'thirdParty/underscore.mixins'
], function (Songs, YouTubeAPIKey, Song, SongType, YouTubeServiceType, Utility,_) {
您在define
中的require
似乎完全没有必要,并且确实会使其他模块如何使用此模块变得复杂,因为一旦加载了模块,就无法保证mixin实际上已注册。这是因为require
是异步的,define
将在传递给require
的代码运行之前返回。
我可以像这样在下划线中添加一个混合。一旦一个模块获得foo
,就可以保证mixin被注册到Underscore。
foo.js
:
define(["underscore"], function (_) {
_.mixin({
foo: function () {
console.log("foo invoked");
}
});
});
index.html
:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8"/>
<script type="text/javascript" src="js/require.js"></script>
</head>
<body>
<script>
require.config({
baseUrl: "js"
});
require(["underscore", "foo"], function (_) {
_.foo();
});
</script>
</body>
</html>
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 在 RequireJs 模块中强调 Js mixins
- 在js中使用mixins