Javascript 如何在木偶中呈现没有model.toJSON()的模板
我正在将我的主干应用程序转换为木偶网,但找不到一个解决方案来呈现带有模型但没有toJSON的模板。据我所知,木偶网自动使用this.model.toJSON呈现模板 这是我的主干代码: $this.el.htmlthis.templatethis.model 在我的模板中,我使用了如下内容:Javascript 如何在木偶中呈现没有model.toJSON()的模板,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我正在将我的主干应用程序转换为木偶网,但找不到一个解决方案来呈现带有模型但没有toJSON的模板。据我所知,木偶网自动使用this.model.toJSON呈现模板 这是我的主干代码: $this.el.htmlthis.templatethis.model 在我的模板中,我使用了如下内容: <div> <% if (methodName()) { %> <%= get('attribute'); %> <% } %> </d
<div>
<% if (methodName()) { %>
<%= get('attribute'); %>
<% } %>
</div>
根据您刚才调用的渲染
木偶网公开一个渲染事件,您可以监听该事件以附加视图内容
// ...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
为了保持木偶惯例,你应该使用木偶
如果您依赖模板中的逻辑,那么重构模板是一个好主意:
<div>
<% if (booleanAttribute) { %>
<%= attribute %>
<% } %>
</div>
我还没有测试过这个,但是我想没有理由可以使用木偶的templateHelper。根据文件: templateHelpers属性可以应用于任何 呈现一个模板。当此属性存在时,它的内容 将混合到从 序列化数据方法 我认为,与其改变木偶渲染的方式,不如简单地使用templateHelpers为模板提供更多数据。对于您的用例,我将执行以下操作:
templateHelpers: function () {
return {
get: function (attribute) {
return this[attribute];
}
}
}
在此格式中,此inside templateHelpers.get指向序列化数据,该数据是一个具有与视图模型属性相对应的属性名的对象。Marionette将在内部为您调用model.toJSON。如果您依赖于将完整主干模型传递给模板,而这是您永远不应该做的,那么我不得不说您做得不对。很抱歉如果你真的必须这样做,那么你可以覆盖谢谢你的评论。如果我可能会问,为什么通过整个模型是如此错误?我站在提倡无逻辑模板的阵营中。如果您通过了整个主干模型,那么您还可以访问所有方法,而大多数情况下,您并不需要这些方法。调用从模板中转换数据的方法太诱人了。在我看来,模板不应该有这种能力。我的主要原因是:-性能更少的方法调用,更少的内存消耗-渲染前缓存解析-调试更小的模型-更少暴露您的内部工作-这些只是我脑海中出现的一些。为Torsten的解释干杯!这是有道理的
templateHelpers: function () {
return {
get: function (attribute) {
return this[attribute];
}
}
}