我注意到Marionette对于他们给你选择渲染数据的方法的自由感到非常不自满。似乎有很多方法可以使用自定义数据初始渲染模板
返回包含数据的模板:
template: function () {
var myTemplate = $('.someTemplate')
return _.template(myTemplate.html())({some: data});
}
非常相似:
render: function () {
var template = this.getTemplate();
var html = Marionette.Renderer.render(template, {
model: this.model.toJSON(),
customData: this.customData
});
this.$el.html(html);
}
序列化数据:
serializeData : function () {
var customData = {some: 'data'};
var model = this.model.toJSON()
return _.extend(customData, model);
}
我看到不同代码中的很多人使用第一个和第二个的变体。我个人更喜欢使用serializeData,但我很好奇:是否有一个优势或用例,使用前两个方法而不是serializeData是合适的?
答案 0 :(得分:2)
第一种情况效率不高 - 每次要渲染时都要重新编译模板。
无论如何,你的用例正是Marionette templateHelpers
的原因。它是向模板提供额外数据的最简洁方式,同时也传递了序列化模型。
所以你会写:
templateHelpers : function () {
return {some: 'data'};
}
或者它只是静态的东西:
templateHelpers: {some: 'data'}
有关如何使用它的更多示例here。
答案 1 :(得分:1)
我认为这一切都是为了探索这些事物的自然行为。默认情况下,骨干视图render为空功能。 Marionette ItemView渲染使用this code扩展了Backbone' s。
getTemplate
方法的模板,默认情况下它会提供template
选项中存储的内容。如果要在多个模板之间进行选择,可以覆盖getTemplate
。serializeData
并使用templateHelpers
扩展来收集需要呈现的数据。默认情况下,第一个返回模型或集合toJSON
方法结果,您可以在每个渲染中以某种方式准备数据。第二个是针对帮助者,如果需要在模板中计算(如果它们是函数)。Marionette.Renderer
,默认情况下只会return template(data)
。然后结果可以附加到视图元素。