【问题标题】:Push onto template data推送到模板数据
【发布时间】:2014-07-16 17:24:50
【问题描述】:

我的主干视图如下所示:

var BooksView = Backbone.View.extend({

initialize: function() {
    this.render();
},

render: function() {
   this.model.fetch({
      success : function(model, resp, opt) {
         var data = { model, navigationText: this.navText };

         this.$el.append ( JST['templates/' + "book"] ( data.toJSON() ) );

      }.bind(this)
   });
}

});

基本上,我正在尝试将模板数据与模型数据以及其他不是模型数据的数据一起传递。现在,我可以做到:

this.$el.append ( JST['templates/' + "book"] ( model.toJSON() ) );

它会发送模型数据。但例如,我有一个变量(navigationText)我也想传递给模板,但它不应该是 model.set。

使用我当前的代码,我收到错误:Uncaught SyntaxError: Unexpected token ,,因为它不是有效对象?

【问题讨论】:

    标签: javascript jquery templates backbone.js underscore.js


    【解决方案1】:

    这不是 JavaScript:

    var data = { model, navigationText: this.navText };
    

    对象字面量是key: values 的逗号分隔列表,当您执行上述操作时,JavaScript 不会将navigationText: this.navText 添加到对象中。稍后你说:

    data.toJSON()
    

    所以大概你想在model 上调用toJSON,然后将你的navigationText 键添加到结果中:

    var data = model.toJSON();
    data.navigationText = this.navText;
    

    然后将data交给模板函数:

    JST['templates/book'](data)
    

    您还可以重组模板,使模型数据和额外的 navigationText 保持分开,例如:

    <%= model.id %>
    <%= navigationText %>
    

    代替:

    <%= id %>
    <%= navigationText %>
    

    那么你可以说:

    JST['templates/book']({
        model: model.toJSON(),
        navigationText: this.navText
    })
    

    这里最大的优势是您可以避免模型的属性与您想要放入模板中的任何额外内容之间可能发生的重叠。

    【讨论】:

    • 当我使用:model: model.toJSON() 时,我必须访问我的模板中的变量,例如:model.model.variable,有没有办法不这样做?
    • 有什么东西取代了你的toJSON 实现吗?您看到的不是标准的 Backbone 行为。我想你可以在必要时使用model.toJSON().model 或类似的诡计。
    • 我不知道 JST,但是在 Underscore 模板中,没有必要使用 .toJSON()。您可以从模板中调用 model.get()。
    • @LaurensKling: JST 应该是模板的预编译版本,它们可以是 Underscore 或 Handlebars 或......您可以将整个模型传递给模板,但通过调用 @ 克隆数据987654340@ 是推荐的最佳做法,可帮助您防止模板意外更改数据。
    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2019-04-21
    • 2021-07-03
    相关资源
    最近更新 更多