【问题标题】:Precompiled Handlebar Inline Templates With Backbone带有主干的预编译车把内联模板
【发布时间】:2013-04-29 11:22:04
【问题描述】:

当我通过将 Handlebar 模板放在单独的文件中来将它们外部化时,我知道如何预编译它们。最近,我一直在缩短模板并内联使用它们。例如,我有以下主干视图。

var ChosenVehicle = Backbone.View.extend({
  className: "car selection",

  initialize: function(options) {
    this.data = options.chosenData;
  },

  template: Handlebars.compile(
    '<h4 class="number">01</h4>' +
    '<img src="assets/img/cars/{{vehicleSlug}}.jpg" alt="{{vehicle}}">' +
    '<p class="flush">' +
      '<small class="text--center caps">' +
        '{{vehicle}}' +
      '</small>' +
    '</p>'
  ),

  render: function() {
    var chosenCar = _.find(this.model.get("cars"), function(car) {
      return car.id.toString() === this.data.vehicleId;
    }, this);
    this.$el.html(this.template(chosenCar));
    return this;
  }
});

使用上述方法而不预编译模板会对性能产生什么影响?我更喜欢在上面设置我的模板,因为我发现它更容易阅读和维护。现在显然我无法预编译我的模板,还是有其他解决方案?

谢谢

泰隆

【问题讨论】:

    标签: javascript backbone.js handlebars.js


    【解决方案1】:

    嗯,您可能认为这更易于阅读和维护,但事实并非如此。您不想打开 javascript 文件来编辑模板/标记;就像您不想打开 CSS 来调试 Javascript 一样(还记得 expression() 吗?)。

    这个想法是通过您的构建系统预编译您的模板。如果您通过 requireJs 加载器插件加载模板,这会很容易;例如:

    template: require("hbs!templates/listItem")
    

    您还可以查看 Backbone Boilerplate 现在是如何做到的:https://github.com/tbranyen/backbone-boilerplate(尽管我们谈到了在不久的将来走上 requireJs 插件之路)

    查看 Github-Viewer 以获取 Backbone Boilerplate 模板加载/预编译的工作示例:https://github.com/tbranyen/github-viewer

    【讨论】:

    • 我在多个项目中使用过 BBB 并且喜欢这个过程,尽管存储库尚未更新到 Backbone 和 Backbone Layout Manager 的最新版本。无论如何,我正在阅读带有骨干的食谱。本书自始至终都使用内联模板。一开始我也被它吓到了,直到它迫使我在不将模板与实际视图分开的情况下纠正简单简洁的视图。我不一定同意您的第一个陈述,因为您使用 javascript 来构建您的标记。
    • 如果你在一个团队中工作,这种模式将成为问题(前端开发人员、集成人员、设计师等)。另外,考虑一下大多数编辑器不会为内联 HTML 字符串添加任何值的事实,如果它们位于单独的文件中,则不是这样:代码着色、智能等。顺便说一句,这种糟糕的模式在 Maintainable Javascript
    • 好的,然后必须同意。与编写《Recipes With Backbone》的人取得了联系,并表示他们的写作方式更容易让读者理解。他们在构建应用程序时不使用上述模式。但是,在书中它指出“由于这种情况下的模板很小,因此我们不会通过将其直接包含在视图类中而牺牲太多的可读性。我们不仅可以使用模板而不会妨碍
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多