Backbone.js - 如何包含外部HTML片段

时间:2013-08-05 08:15:42

标签: javascript ajax backbone.js pjax

我在我的文件系统中预先渲染了HTML片段。是否可以在 backbone.js 中加载HTML片段?我正在寻找与 Angular.js ng-include 类似的内容

例如,在我的文件系统(frag.html)

<h1>I'm a fragment</h1>

应该在给定的占位符位置注入模板

<div id="ph">
   <!-- INJECTED -->
   <h1>I'm a fragment</h1>
</div>

1 个答案:

答案 0 :(得分:1)

假设我们有这个占位符:

<div id="ph"></div>

和frag.html文件中的HTML:

<div>
    <h1>I am</h1>
    <span>an HTML fragment</span>
</div>

让我们使用特殊的PrerenderedView方法定义我们的自定义render,其中包含jQuery函数load

window.PrerenderedView = Backbone.View.extend({
  render: function() {
    this.$el.load(this.options.ajax_template_path, _.bind(this.onRender, this));
    return this;
  },
  onRender: function() {
    // do some stuff here, for example
    var h1 = this.$('h1');
    var text = this.model.get('some_value');
    setTimeout(function() {
      h1.text(text);
    }, 2000);
  }
});

PrerenderedView实例化的那一刻,我们应该传递一个选项ajax_template_path(在我们的例子中是'frag.html')。

$(function() {
  new window.PrerenderedView({
    el: $('#ph'),
    model: new Backbone.Model({some_value: 'It was'}),
    ajax_template_path: 'frag.html'
  }).render();
});

当然,如果我们要在没有服务器的情况下工作,我们不会忘记Same Origin Policy。例如,我们可以使用标志'--allow-file-access-from-files'来启动chrome。