Javascript RequireJS-木偶项目视图上的延迟加载模板
我试图为木偶项目视图延迟加载一个模板,但是事情并没有按照我预期的方式进行。 以下是关于如何重写getTemplate方法的一些提示,我做了以下工作:Javascript RequireJS-木偶项目视图上的延迟加载模板,javascript,templates,requirejs,lazy-loading,marionette,Javascript,Templates,Requirejs,Lazy Loading,Marionette,我试图为木偶项目视图延迟加载一个模板,但是事情并没有按照我预期的方式进行。 以下是关于如何重写getTemplate方法的一些提示,我做了以下工作: getTemplate: function () { var template = require(['text!templates/login/loginbox-template.html'], function (template) { return template; }); return _.temp
getTemplate: function () {
var template = require(['text!templates/login/loginbox-template.html'], function (template) {
return template;
});
return _.template(template);
}
但是输出是require方法的函数体
function localRequire(deps, callback, errback) (... and so on)
返回require方法也不起作用:
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'
Uncaught RangeError:最大调用堆栈大小超过jquery-1.11.js?v=1393591915026:5801
未捕获的TypeError:对象#没有方法“slice”
似乎在require
完成之前返回了getTemplate
方法。我可以用setTimeout
函数包装返回,但这不是一个好的解决方案
关于如何处理这个问题有什么想法吗?当require()
用于延迟加载内容时,它是异步的。返回的值是无关的。您需要的是:
getTemplate: function () {
var template;
require(['text!templates/login/loginbox-template.html'], function (t) {
template = t;
// signal the application that template is resolved; I suggest promises
});
}
异步意味着执行的结果不能立即可用。注释向应用程序发出信号…
是代码的占位符,它将通知应用程序的其他部分结果实际可用,并且它们可以继续处理。如果你没有预料到的话,这是很乏味的,但事情就是这样
看看由许多伟大的库实现的,从到独立的。Nice,这似乎是正确的方法。我发现了一篇关于这个主题的博客文章,使用了承诺,就像你指出的那样。当然,承诺是异步JS的发展方向。对于使用RequireJS的延迟加载,您还可以查看我的项目: