我已經加載了帶有bower的把手,因此它駐留在供應商目錄中。看來我已經配置了一切,我可以在檢查器中看到handlebars.js文件已加載,它沒有提供404 ..但據我所知,以下內容應該將其添加到全局名稱空間(窗口)。正如你可以看到我有我的模塊「裝」,並且工作正確的,但是這個模塊裏面取決於車把 - 與墊片配置ReferenceError: Handlebars is not defined
無法加載需要配置路徑和墊片的把手
requirejs.config({
baseUrl: "/scripts",
urlArgs: "bust=" + (new Date()).getTime(),
paths: {
"jquery": "vendor/jquery/dist/jquery",
"loaded": "vendor/loaded/dist/loaded",
"handlebars": "vendor/handlebars/handlebars"
},
shim: {
"loaded": {
deps: ["jquery", "handlebars"],
exports: "loaded"
},
"handlebars": {
exports: "Handlebars"
}
}
});
requirejs(["app"]);
這裏是加載模塊(非AMD的一個片段,負載):
if(typeof loaded === "undefined") loaded = {};
loaded.dispatch = (function() {
// ...
return {
render: function() {
// ...
// gets this far, but error as the library is missing
var template = Handlebars.compile(_template);
// ...
}
}
})();
如前所述,我可以在把手不是全局命名空間(窗口)的屬性檢查看看。從我讀過的其他文章中,我看不到我配置錯誤。另外,因爲加載是需要的,我不知道這是什麼問題與車把。
UPDATE
新main.js作爲車把版本不需要它,它似乎:
requirejs.config({
baseUrl: "/scripts",
urlArgs: "bust=" + (new Date()).getTime(),
paths: {
"jquery": "vendor/jquery/dist/jquery",
"loaded": "vendor/loaded/dist/loaded",
"handlebars": "vendor/handlebars/handlebars"
},
shim: {
"loaded": {
deps: ["jquery", "handlebars"],
exports: "loaded"
}
}
});
requirejs(["app"]);
感謝您的回覆。我有handlebars v4.0.4,我可以在文件中看到它確實擁有你發佈的if if else else條件。我匹配你提供的配置(刪除車把墊片),但仍然有同樣的錯誤。我會看到main.js(配置文件)沒有被緩存。所以,如果handlebars沒有被添加到窗口對象,你知道在DOM中我應該找到它嗎?我嘗試在DOM檢查器中搜索,但沒有提供任何結果。或者還有什麼我可以看看?我會用新的main.js更新我的OP。再次感謝。 – Martyn
它可能不會被附加到全局上下文中(變量永遠不會附加到dom上,dom是針對節點的,例如div,而不是變量)。使用requirejs,您可以檢索一個模塊作爲define函數的參數:'define([「handlebars」],function(Handlebars){/ * stuff * /}'。我目前沒有電腦,但我會更近一些 –
我編輯了我的答案不幸的是,這並不完美,但我認爲你可以做得更好 –