2012-05-11 26 views
2
require.config({ 
    paths: { 
     jquery: 'libs/jquery', 
     underscore: 'libs/underscore', 
    } 
}); 
define([ 
    'jquery', 
    'underscore', 
    ], function($,_){ 
     var test = _.template("hello: <%= name %>",{name:"warren"}); 

}); 

考慮使用requirejs加載jQuery和強調,爲什麼我收到此錯誤上面的代碼...Underscore.js遺漏的類型錯誤:無法調用空的方法「模板」

Uncaught TypeError: Cannot call method 'template' of null 

所有JS似乎正在加載...錯誤指向_.template行。這讓我瘋狂......

回答

7

你確定你已經捆綁了下劃線庫以便與requireJS一起使用嗎?

當你寫:

define([ 
    'jquery', 
    'underscore', 
    ], function($,_){ 
     var test = _.template("hello: <%= name %>",{name:"warren"}); 

}); 

的「_」變量(回調函數的第二個參數)被分配有下劃線庫的出口(指定的第二依賴)。

我想你使用了原始版本的下劃線,它不是用於requireJS的包。 在你underscore.js文件,在開始時添加以下行:

define(function() { 

和此行結尾:

return _;}); 

因此,出口很好配置。

另一個可能的解決方案是使用全局'_'變量:您只需要刪除回調的第二個參數即可。

define([ 
    'jquery', 
    'underscore', 
    ], function(){ 
     var test = _.template("hello: <%= name %>",{name:"warren"}); 

}); 

從那裏,你的瀏覽器將使用「_」全局變量,這是在下劃線定義,其回調時被調用設置。

與jQuery預期的行爲相同。

+0

這將表明你是正確的:http://stackoverflow.com/a/8156341/479863 –

+0

也分叉版本,是AMD compat - https://github.com/amdjs/underscore –

+0

謝謝,這成功了!正如你所提到的,我最終只是添加了下劃線文件。 – wcolbert

相關問題