如何在没有model.toJSON()的情况下渲染模板

时间:2015-05-05 13:09:10

标签: javascript backbone.js marionette

我正在将我的Backbone应用程序转换为Marionette并且找不到使用模型渲染模板但没有toJSON()的解决方案。据我所知,Marionette会自动使用this.model.toJSON()

呈现模板

这是我的骨干代码:

$(this.el).html(this.template(this.model))

在我的模板中,我使用的内容如下:

<div>
  <% if (methodName()) { %>
    <%= get('attribute'); %>
  <% } %>
</div>

2 个答案:

答案 0 :(得分:0)

根据itemView documentation,您只需调用渲染。

Marionette会公开您可以收听的rendered事件,以附加您的观看内容。

// ...snip

initialize: function () {
   this.listenTo(this.model, "change", this.render);
},

onRendererd: function (view) {
    // this is not exactly good practice
    // better handle this on the outside with a layout
    this.$el.appendTo($("#screens"));
}

// ...snip

要遵守Marionette惯例,您应该使用layouts and regions

如果您依赖模板中的逻辑,最好重构模板:

<div>
  <% if (booleanAttribute) { %>
    <%= attribute %>
  <% } %>
</div>

然后在您的模型中使用parse方法:

// ....snip
parse: function (response) {
    return _.defaults({
        booleanAttribute: this.method(response)
    }, response);
},
// ...snip

答案 1 :(得分:0)

我还没有测试过这个,但我想你没有理由可以使用木偶templateHelper。根据文档:

  

templateHelpers属性可以应用于任何View对象   呈现模板。当此属性出现其内容时   将混合到从...返回的数据对象   serializeData方法。

我认为不是改变Marionette呈现的方式(而不是那里有任何错误),只需使用templateHelpers为模板提供更多数据。对于你的用例,我会做类似的事情:

templateHelpers: function () {
  return {
    get: function (attribute) {
      return this[attribute];
    }
  }
}

在此格式中,this内的templateHelpers.get()指向序列化数据,这是一个对象,其属性名称与视图的模型属性相对应。