0

尝试创建一个 AMD Javascript 库以包含在非 AMD 项目中。这是我的设置:

应用程序.coffee

define ->

class App

    constructor: -> console.log 'instantiating App'

    init: -> console.log 'Init called'

索引.html

<body>

<script type="text/javascript" src="//code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="dev-latest.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        console.log('doc', window.app);
    });

    $(function(){
        console.log('func', window.app);
    });

    window.onload = function()
    {
        console.log('onload', window.app);
    }

</script></body>

main.js

require(['cs!app'], function(app){
  return window.app = new app;
});

我正在使用 r.js 优化器构建这个项目,以获取 dev-latest.js 作为输出。这是我的构建文件(PS:构建成功):

({
    baseUrl: './vendor',

    paths: {

        app: '../app',
        'require-lib': 'require'
    },

    name: '../main',

    out: 'dev-latest.js',

    include: 'require-lib',

    preserveLicenseComments: false

})

在浏览器中运行代码时,输​​出如下:

doc undefined
func undefined
onload undefined
instantiating App dev-latest.js:1
app.init(); // running this manually in the browser console
Init called

我应该如何解决这个问题并在使用之前加载应用程序?

4

2 回答 2

0

使用 AMD,您不能依赖在模块之外创建的模块。唯一可靠的方法是将一个模块的结果加载到另一个模块中。所以在你的情况下需要创建一个新模块,然后可以 lsiten 到$.read

define( [App], (App)-> 
  $(document).ready(function(){
        console.log('doc', App);
   });
)
于 2013-07-16T19:32:56.897 回答
-1

通过使用使用 CommonJS 形式的依赖加载并保存所有混乱的browserify(刚刚找到它)解决了它。启动项目的一个很好的模板是amitayd 的 grunt-browserify-jasmine 设置

于 2013-07-16T23:24:06.070 回答