0

目前在我正在处理的 Backbone 项目中,我已经按模块组合了所有模板。就像是:

  • users.html
    • #profileTemplate
    • #changePasswordTemplate
    • ...
  • something.html
    • #someTemplate
    • #anotherTemplate

然后我根据需要按模块加载模板$.get。我打算使用 Backbone Marionette 来加载这些模板,建议的方法是:link

Backbone.Marionette.TemplateCache.loadTemplate = function(templateId, callback){
  var that = this;
  var url = templateId + ".html";

  $.get(url, function(templateHtml){
    var template = $(templateHtml).find(templateId);
    callback(template);
  });
}

这意味着我必须将我的模板分解成更多的文件,这意味着更多的网络请求。我想知道这样做的推荐方法是什么?将所有内容组合成一个大文件或许多小文件或模块之间的某个地方?如果按模块,那么我将需要添加一个参数以loadTemplate(moduleUrl, templateSelector, callback)尚未尝试过,明天会这样做,但即使它不会破坏任何东西,是否也推荐这样做?我正在覆盖第 3 方框架方法,更糟糕的是,更改其方法签名?那么推荐的解决方案是什么?

也许因为我使用的是 RequireJS,所以我的模板可以通过 Require 加载?

4

1 回答 1

3

我想知道这样做的推荐方法是什么?

推荐的方法是不异步加载文件。尽可能立即加载您需要的所有内容。

"Async does not make things go fast. Async is what you do when you CAN'T make something go fast enough." - https://twitter.com/izs/status/216954021926285313

Maybe since I am using RequireJS, my templates can be loaded via Require?

Yes.

Let RequireJS optimize your template by pre-compiling them, and concatenating them in to your app's file w/ the r.js plugin. This will significantly improve the performance of your app.

...

In the off-chance that you really do need to do async loading of templates and modules, group things in to the smallest number of files possible the way you have been thinking. You would need to modify the code you referenced to handle this.

于 2012-07-16T17:00:01.343 回答