0
我試圖爲一個Marionette ItemView延遲加載模板,但事情並不按我期望的方式工作。 以下有關如何重寫是getTemplate方法的一些技巧,我做了以下內容:RequireJS - 在Marionette上的延遲加載模板ItemView
getTemplate: function() {
var template = require(['text!templates/login/loginbox-template.html'], function (template) {
return template;
});
return _.template(template);
}
但輸出是需要方法的函數體。
function localRequire(deps, callback, errback) (... and so on)
並返回需要方法是不是工作壓力太大:
getTemplate: function() {
return require(['text!templates/login/loginbox-template.html'], function (template) {
return _.template(template);
});
}
這使我在控制檯中的一些錯誤:
Uncaught RangeError: Maximum call stack size exceeded jquery-1.11.js?v=1393591915026:5801
Uncaught TypeError: Object #<Object> has no method 'slice'
看來,getTemplate
方法被前返回require
已完成。我可以將返回包裝在setTimeout
函數中,但這不是一個好的解決方案。
有關如何處理此問題的任何想法?
不錯,它似乎是正確的做法。就像你指出的那樣,我發現了一篇關於這個主題的博客文章,使用promise。 http://www.joezimjs.com/javascript/lazy-loading-javascript-with-requirejs/ – darksoulsong
肯定的承諾是走異步JS的路。對於使用RequireJS進行延遲加載,您還可以查看我的項目:[require-lazy](https://github.com/nikospara/require-lazy) –