我正在尝试定义具有条件依赖性的模块(取决于Modernizr测试)。我已经做了一些有效的事情,但对我感到很难过。
你能告诉我你的想法以及是否有更好的方法吗?感谢。
var dependencies = ["jquery"];
require(["modernizr"], function() {
if(Modernizr.canvas) dependencies.push("modernizr/excanvas");
});
define(dependencies, function($) {
$(function() {
// code here
});
});
答案 0 :(得分:3)
当浏览器不支持某些内容时,你试图加载该文件,加载更多的javascript以使其成为一种工作类型场景?
或者我可以看到您尝试使用不同的方法实现相同的功能,因为方法可用或不可用,并且希望根据该条件加载其他或替代的javascript。
尽管如此,请在这里承担我的假设并且我没有完全尝试过这个但是这个理论可能有意义:)
或许类似于
define("jquery","modernizr", function($) {
$(function() {
var functionMain = function() {
// code here
}
var functionA = require(["modernizr/excanvas"], function() {
functionMain()
});
//require here not strictly necessary
var functionB = require([""], function() {
functionMain()
});
if(Modernizr.canvas)
functionA();
else
functionB()
});
});
我不知道,也许只是风格或偏好的问题,这只是做同样事情的另一种方式,但没有我刚刚不喜欢的依赖数组(lol)虽然真的没有错如果您想要做的就是有条件地加载该文件而其余的代码是相同的
我更多地考虑基于条件分割实现,然后每个实现具有不同的条件要求,仍然是它的所有观点呃? :)
答案 1 :(得分:1)
Modernizr目前尚未包含在'amd'定义函数中。为了使modernizr作为require.js的模块加载,你需要按如下方式破解modernizr.js:
有关 modernizr.js
CUT:
;window.Modernizr = function
替换:
define('Modernizr',function(){
;Modernizr = function
将其添加到底部
return Modernizr;
});
答案 2 :(得分:1)
您实际上可以做两件事,这取决于您是否要添加全局变量,或者您不想。 在任何情况下,您都要创建一个modernizr.js文件,并且如果要创建全局变量
define( function() {
/* Modernizr 2.5.3 (Custom Build) | MIT & BSD
* Build: http://modernizr.com/download/#-touch-cssclasses-teststyles-prefixes-load
*/
Modernizr = (function( window, document, undefined ) {
// all your modernizr code
return Modernizr;
})(window, window.document);// Be careful to change this with window
} );// This closes the define call
然后你可以简单地
require( ['modernizr'], function() {
// Here the script has loaded and since you added a global variable, use that
if(!Modernizr.borderradius){
});
如果您不想添加全局变量,则应该执行
define( function() {
/* Modernizr 2.5.3 (Custom Build) | MIT & BSD
* Build: http://modernizr.com/download/#-touch-cssclasses-teststyles-prefixes-load
*/
// Change the name of the variable so you don't have scope issues
var modernizr = (function( window, document, undefined ) {
// all your modernizr code
return Modernizr;
})(window, window.document);// Be careful to change this with window
// Return your variable
return modernizr;
} );// This closes the define call
然后
require( ['modernizr'], function( Mdzr ) {
// Here the script has loaded and you assigned the return value of
// the script to the variable Mdzr so use that
if(!Mdzr.borderradius){
});