serializeData函数与Marionette.renderer的自定义数据

时间:2015-09-29 18:01:19

标签: javascript marionette

我注意到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是合适的?

2 个答案:

答案 0 :(得分:2)

第一种情况效率不高 - 每次要渲染时都要重新编译模板。

无论如何,你的用例正是Marionette templateHelpers的原因。它是向模板提供额外数据的最简洁方式,同时也传递了序列化模型。

所以你会写:

templateHelpers : function () { return {some: 'data'}; }

或者它只是静态的东西:

templateHelpers: {some: 'data'}

有关如何使用它的更多示例here

答案 1 :(得分:1)

我认为这一切都是为了探索这些事物的自然行为。默认情况下,骨干视图render为空功能。 Marionette ItemView渲染使用this code扩展了Backbone' s。

  1. 它采用getTemplate方法的模板,默认情况下它会提供template选项中存储的内容。如果要在多个模板之间进行选择,可以覆盖getTemplate
  2. 然后,它会通过运行serializeData并使用templateHelpers扩展来收集需要呈现的数据。默认情况下,第一个返回模型或集合toJSON方法结果,您可以在每个渲染中以某种方式准备数据。第二个是针对帮助者,如果需要在模板中计算(如果它们是函数)。
  3. 然后模板和数据转到Marionette.Renderer,默认情况下只会return template(data)。然后结果可以附加到视图元素。