Javascript RequireJS-木偶项目视图上的延迟加载模板

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方法的一些提示,我做了以下工作:

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的延迟加载,您还可以查看我的项目: