我正在将我的Backbone应用程序转换为Marionette并且找不到使用模型渲染模板但没有toJSON()的解决方案。据我所知,Marionette会自动使用this.model.toJSON()
呈现模板这是我的骨干代码:
$(this.el).html(this.template(this.model))
在我的模板中,我使用的内容如下:
<div>
<% if (methodName()) { %>
<%= get('attribute'); %>
<% } %>
</div>
答案 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()
指向序列化数据,这是一个对象,其属性名称与视图的模型属性相对应。