我想addClass在我的应用程序中使用jQuery UI的功能.
除了我使用正常的jQuery,下划线,主干与requirejs一起分层.
我已经像这样配置了jQuery UI:
require.config({
deps: ["main"],
paths: {
"text": "lib/text"
, "jquery": "lib/jquery"
, "jquery-ui": "lib/jquery-ui"
, "underscore": "lib/underscore"
, "backbone": "lib/backbone"
, "bootstrap": "lib/bootstrap"
, "templates": "../templates"
},
shim: {
"jquery-ui": {
exports: "$",
deps: ['jquery']
},
"underscore": {
exports: "_"
},
"backbone": {
exports: "Backbone",
deps: ["underscore", "jquery"]
},
"bootstrap": ['jquery']
}
});
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中:
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
$('div').addClass('white');
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这只是普通addClass而不是来自jQuery UI的动画.
PS:我使用完整的jQuery版本.
我是从一个"老"浏览器风格的模块结构改变一个项目,一个"新"浏览器的或 - 服务器端JavaScript的模块结构require.js.
在客户端我使用的是异地托管的jQuery,所以我从他们在README 的"use priority config"技术中给出的示例开始:
<title>My Page</title>
<script src="scripts/require.js"></script>
<script>
require({
baseUrl: 'scripts',
paths: {
jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min',
jqueryui: ...,
...
... // bunch more paths here
},
priority: ['jquery']
}, [ 'main' ]);
</script>
Run Code Online (Sandbox Code Playgroud)
这实际上是正常的.但我想将功能从main导出到HTML网页本身.例如:
<a class="button" href="#" onclick="MyApi.foo();">
<img src="foo.png" alt="foo" />Click for: <b>Foo!</b>
</a>
Run Code Online (Sandbox Code Playgroud)
在适应AMD模块模式之前,我通过在全局空间中创建字典对象来从我的各种文件中公开功能:
// main.js
var MyApi = {};
jQuery(document).ready(function($) {
// ...unexported code goes here...
// export function via MyApi
MyApi.foo = function() {
alert("Foo!");
};
}); …Run Code Online (Sandbox Code Playgroud) 我想在使用RequireJS的backbone.js应用程序中包含jQueryUI.index.html中包含的main.js文件如下:
require.config({
paths: {
jquery: 'libs/jquery/jquery-1.7.2.min',
jqueryui: 'libs/jquery/jquery-ui-1.8.18.custom.min',
underscore: 'libs/underscore/underscore-min',
backbone: 'libs/backbone/backbone-optamd3-min',
text: 'libs/require/text',
templates: 'templates'
}
});
require(['app'], function(App){
App.start();
});
Run Code Online (Sandbox Code Playgroud)
对于每个模型/视图/路由器文件,我只是在"define"块的开头包含'jquery'命名空间,如下所示:
define([
'jquery',
'underscore',
'backbone',
'views/categoryview',
'text!templates/category.html'
], function($, _, Backbone, CategoryView, categoryTemplate){
// Here comes my code
});
Run Code Online (Sandbox Code Playgroud)
但是jQueryUI无法在这些文件中使用.我的代码有问题吗?或者我是否还应在每个"定义"块中包含"jqueryui"?但是如果我在"define"块中包含"jqueryui",我应该如何在函数中命名它以避免名称与jquery冲突?