在车把模板中渲染骨干子模型

时间:2014-01-29 10:49:02

标签: backbone.js marionette handlebars.js backbone-model

我有模型和子模型:

var Field = Backbone.Model.extend();
var MetaField = Backbone.Model.extend();

var metaField = new MetaField({ title: 'width' });
var field = new Field({ meta: metaField, value: 5});

我想通过把手模板渲染这个模型(查看代码是无限的)

模板看起来像这样:

field: {{ meta.get('title') }} value: {{ value }}

但是meta.get导致错误(据我所知,没有能力在把手中调用方法)。如何呈现元属性?我应该将MetaField对象抛出到模板上下文吗?

1 个答案:

答案 0 :(得分:3)

您必须在视图中的模型中解决此问题,具体取决于您选择的方法,它将改变您的更改范围。

1。在你的模型中

这将始终将元对象包含在序列化的Field对象中。它将在将模型发送到服务器或在任何视图中呈现时使用。

var Field = Backbone.Model.extend({
   toJSON : function(){
     var json = _.clone(this.attributes);
     if(this.get('meta'){
        json.meta = this.get('meta').toJSON();
     }
     return json;
   }
});

2。在您的视图中

这只适用于视图,不会影响其他视图呈现模型或发送到服务器的方式

 var FieldView = Marionette.ItemView.extend({

    //return value of this function is merged with the data
    //that is passed to your template
    templateHelpers: function(){
       return {
          meta: this.model.get('meta').toJSON();
       }
    }

 });

模板

您可以使用模板中的meta属性,

field: {{ meta.title }} value: {{ value }}