Javascript Classie未定义,如何使用dojo AMD将匿名对象引入范围

Javascript Classie未定义,如何使用dojo AMD将匿名对象引入范围,javascript,dojo,js-amd,classiejs,Javascript,Dojo,Js Amd,Classiejs,我有以下代码: /*! * classie - class helper functions * from bonzo https://github.com/ded/bonzo * * classie.has( elem, 'my-class' ) -> true/false * classie.add( elem, 'my-new-class' ) * classie.remove( elem, 'my-unwanted-class' ) * classie.toggle

我有以下代码:

/*!
 * classie - class helper functions
 * from bonzo https://github.com/ded/bonzo
 * 
 * classie.has( elem, 'my-class' ) -> true/false
 * classie.add( elem, 'my-new-class' )
 * classie.remove( elem, 'my-unwanted-class' )
 * classie.toggle( elem, 'my-class' )
 */

/*jshint browser: true, strict: true, undef: true */
/*global define: false */

( function( window ) {

    'use strict';

// class helper functions from bonzo https://github.com/ded/bonzo

    function classReg( className ) {
        return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
    }

// classList support for class management
// altho to be fair, the api sucks because it won't accept multiple classes at once
    var hasClass, addClass, removeClass;

    if ( 'classList' in document.documentElement ) {
        hasClass = function( elem, c ) {
            return elem.classList.contains( c );
        };
        addClass = function( elem, c ) {
            elem.classList.add( c );
        };
        removeClass = function( elem, c ) {
            elem.classList.remove( c );
        };
    }
    else {
        hasClass = function( elem, c ) {
            return classReg( c ).test( elem.className );
        };
        addClass = function( elem, c ) {
            if ( !hasClass( elem, c ) ) {
                elem.className = elem.className + ' ' + c;
            }
        };
        removeClass = function( elem, c ) {
            elem.className = elem.className.replace( classReg( c ), ' ' );
        };
    }

    function toggleClass( elem, c ) {
        var fn = hasClass( elem, c ) ? removeClass : addClass;
        fn( elem, c );
    }

    var classie = {
        // full names
        hasClass: hasClass,
        addClass: addClass,
        removeClass: removeClass,
        toggleClass: toggleClass,
        // short names
        has: hasClass,
        add: addClass,
        remove: removeClass,
        toggle: toggleClass
    };

// transport
    if ( typeof define === 'function' && define.amd ) {
        // AMD
        define(classie );
    } else {
        // browser global
        window.classie = classie;
    }

})( window );
当我插入包含AMD的dojo工具包时,定义(classie);当我尝试使用classie对象时,比如:classie.hasClass(document.getElementById('some_element'),'some_class')) 我在控制台中收到一个错误,告诉我“未捕获引用错误:未定义classie”

我一直在搜索和阅读Dojo中的异步模块定义,但我找不到如何处理匿名定义的模块,如何要求它们,或者我需要运行什么才能将它们放在需要的地方

如果我删除Dojo,代码就可以工作,因为变量可以在window.classie中全局找到,也可以仅通过classie本身找到

我也在使用另一个与classie有相同问题的库

我不想更改这些js库,当我试图在AMD中使用这些定义的对象时,我做错了什么

编辑: 以下是代码的精简版本:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Tutorial: Hello Dojo!</title>
</head>
<body>
<h1 id="greeting">Hello</h1>
    <!-- load Dojo -->
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.8.9/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script type="text/javascript">
( function( window ) {

    'use strict';

    // class helper functions from bonzo https://github.com/ded/bonzo

    function classReg( className ) {
        return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
    }

    // classList support for class management
    // altho to be fair, the api sucks because it won't accept multiple classes at once
    var hasClass, addClass, removeClass;

    if (false && 'classList' in document.documentElement ) {
        hasClass = function( elem, c ) {
            return 1;
        };
        addClass = function( elem, c ) {
            return 1;
        };
        removeClass = function( elem, c ) {
            return 1;
        };
    }
    else {
        hasClass = function( elem, c ) {
            return 1;
        };
        addClass = function( elem, c ) {
            return 1;
        };
        removeClass = function( elem, c ) {
            return 1;
        };
    }

    function toggleClass( elem, c ) {
        return 1;
    }

    var classie = {
        // full names
        hasClass: hasClass,
        addClass: addClass,
        removeClass: removeClass,
        toggleClass: toggleClass,
        // short names
        has: hasClass,
        add: addClass,
        remove: removeClass,
        toggle: toggleClass
    };

    // transport
    if ( typeof define === 'function' && define.amd ) {
        // AMD
        define( classie );
    } else {
        // browser global
        window.classie = classie;
    }

})( window );

// test object
alert(classie.hasClass(document.getElementById('some_element'), 'some_class'));
</script>
<div id="some_element"></div>
</body>
</html>

教程:你好,Dojo!
你好
(功能(窗口){
"严格使用",;
//来自bonzo的类帮助器函数https://github.com/ded/bonzo
函数classReg(className){
返回新的RegExp(“(^ |\\s+”+className+”(\\s+|$)”);
}
//类列表对类管理的支持
//虽然公平地说,api很糟糕,因为它不会同时接受多个类
变量hasClass、addClass、removeClass;
if(document.documentElement中为false&“类列表”){
hasClass=函数(元素,c){
返回1;
};
addClass=函数(元素,c){
返回1;
};
removeClass=函数(elem,c){
返回1;
};
}
否则{
hasClass=函数(元素,c){
返回1;
};
addClass=函数(元素,c){
返回1;
};
removeClass=函数(elem,c){
返回1;
};
}
函数切换类(elem,c){
返回1;
}
风险等级={
//全名
hasClass:hasClass,
addClass:addClass,
removeClass:removeClass,
toggleClass:toggleClass,
//简称
has:hasClass,
add:addClass,
remove:removeClass,
切换:切换类
};
//运输
if(typeof define==='function'&&define.amd){
//AMD
定义(分类);
}否则{
//浏览器全局
window.classie=classie;
}
})(窗口);
//测试对象
警报(classie.hasClass(document.getElementById('some_element'),'some_class'));

如果您能更好地了解如何/在何处尝试使用这些库,这将有助于为答案/解决方案提供依据。如果您按照预期删除dojo库,这是我试图实现的目标的精简版本,我在不同的网站上插入这些代码来进行跟踪,你可以想象他们有不同的库,在本例中,他们有一个DojoJS库。问题是如何在AMD中使用已定义的文本对象?为什么不使用dojo/dom类?它可以满足您的需要,您不必与AMD发生冲突;)@ben感谢您花时间回答,正如我之前所说,我将在其他使用不同库的网站上插入此脚本,这与我使用的js库无关,问题是,这个库和另一个库正在使用AMD定义文本对象,我不知道如何使用这种方式定义的对象,目前唯一的解决方案是重新编写这些库,我希望避免这种情况。