2012-02-07 69 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的引導庫將是微不足道的 - 沒有必要分散文件到處。