2012-02-07 64 views
1

我试图在Spine.js应用中使用elycharts。 Elycharts monkey-patches jQuery添加$('...')。chart(...)。不幸的是,我只是得到一个错误,说$没有函数“图表”。Spinejs依赖加载顺序

因为这是我使用spine.app生成的第一个Spine.js应用程序。这使用jQuery作为NPM模块。 Elycharts不是CommonJS友好的,因此必须包含在slug.json的“libs”部分。根据Spine文档(请参阅Hem documentation中的slug.json),“libs”中的任何文件都会在“dependencies”中的任何文件之前加载。所以我很确定问题是jQuery在加载jQuery之前加载了elycharts,但是由于$没有定义,所以它默默地失败了。

有没有人看到类似这样的问题,使用“库”取决于已通过NPM包括的库?有没有办法更好地控制spine.js加载顺序超越库 - >依赖关系?

+0

似乎更像是一个边框问题?如果存在的话可能会添加一个标签。 – SpoBo 2012-02-15 16:13:24

回答

0

对我来说,“不那么好”的解决方案是这样的:

<script type="text/javascript"> 
    var jQuery = require("jqueryify"); 
    var exports = this; 
    jQuery(function(jQuery){ 
// load jquery dependant libraries     
    $.getScript("//cdnjs.cloudflare.com/ajax/libs/waypoints/1.1.6/waypoints.min.js", function() { 
     var App = require("index"); 
     exports.app = new App({el: $("#wrapper")});  
    }); 
</script> 

因此,关键是应用程序初始化之前加载了jQuery依赖库。 希望它可以帮助别人。

0

我一直在寻找一种解决方案,将Twitter Bootstrap(也取决于jQuery)包含到spine.js应用程序(使用spine脚本生成)中。我找到的最好的是:只需用jquery.js代替jqueryify

删除这些行:

./app/lib/setup.coffee:3:require('jqueryify') 
./package.json:9: "jqueryify": "~0.0.1", 
./public/index.html:9: var jQuery = require("jqueryify"); 
./slug.json:5: "jqueryify", 

然后把jquery.js和你的JavaScript库为app/lib,并将它们添加到slug.json libs阵列:

"libs": [ 
    "app/lib/jquery.js", 
    "app/lib/jquery-dependent-3rd-party-lib.js" 
] 

,瞧!

P.S.作为Twitter的引导,我建议把整个bootstrap目录到public目录(因为它也与CSS和图像运)和slug.json相应引用它:

"libs": [ 
    "app/lib/jquery.js", 
    "public/bootstrap/js/bootstrap.min.js" 
] 

这样更新Twitter的引导库将是微不足道的 - 没有必要分散文件到处。