如何为特定模板加载three.js

时间:2015-08-25 15:31:40

标签: javascript html meteor three.js

我知道将外部库加载到meteor中的两种主要方法(如http://www.manuel-schoebel.com/blog/use-meteor-iron-router-waiton-to-load-external-javascript中所述)。

此外,还有一些流媒体套件可以全局加载three.js

有谁知道如何使用模板级方法让THREE正常工作?我不希望three.js加载所有路线,但我到目前为止尝试使用〜

Template.threeview.onRendered(function(){

    Session.setDefault('threejs', false);
    // is library already loaded?
    if (Session.get('threejs') === false) {
        console.log('Requesting threejs...')
        $.getScript('/js/three.min.js', function() {
            Session.set('threejs', true);
            // the THREE object should now be accessible here
            // as well as in the window environment...?
            console.log(window.THREE);
            console.log(THREE);
        });
    };
});

不起作用 - 我

undefined 
Uncaught ReferenceError: THREE is not defined

在js控制台窗口中。

有什么想法吗?

修改

发现这个类似的问题Can't find three.js after loading through Ajax遇到了同样的问题 - 我可以确认从CDN加载是有效的。有没有人有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

最后想出来 - 使这项工作的方法是编辑three.min.js源文件。 在'use strict';开头删除/评论three.min.js可让其正确加载。

这似乎与meteor的以下特性/问题有关:https://github.com/meteor/meteor/issues/1380

CDN没有缩小,并且不包含'use strict;'。为安全起见,'use strict;'应该在声明全局THREE命名空间后放置。