Backbone在将模型呈现为模板之前扩展模型

时间:2013-09-09 23:41:46

标签: javascript backbone.js

我想将其他变量传递给我的模板,即一些未包含在模型中的变量。这些基本上是显示参数,例如屏幕将如何向用户显示。它不必保存在数据库中。

我试过了,但它似乎不起作用:

render: function () {
         this.extra_list = _.shuffle(this.extra_list);
         jQuery.extend(this.model, this.extra_list);
         this.$el.html(this.template(this.model.toJSON()));..
         return this;
      }

当我在模板中引用extra_list时,我得到一个错误,即未定义变量。我错过了什么?

1 个答案:

答案 0 :(得分:3)

model.toJSON()返回模型的属性而非属性。由于您的扩展函数是将这些属性直接添加到模型中,因此在将toJSON的输出传递给模板时,它们是未定义的。

extra_list添加到模型的属性中(听起来您不想这样做),或将toJSON的输出与extra_list合并,然后将其传递给模板。

编辑:如评论中所述,您可以使用_.extend将extra_list与模型的属性“合并”:

  render: function () {
    this.extra_list = _.shuffle(this.extra_list); 

    var data = _.extend(this.model.toJSON(), this.extra_list);

    this.$el.html(this.template(data));
    return this;
  }