【问题标题】:Rendering backbone submodel in handlebars template在车把模板中渲染主干子模型
【发布时间】:2014-01-29 10:49:02
【问题描述】:

我有模型和子模型:

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 对象扔到模板上下文吗?

【问题讨论】:

  • 错误是什么意思?你如何将这两个模型传递给视图?
  • 问题是 toJSON() 函数不会递归地遍历子模型。您必须实现该行为;这会有所帮助:) stackoverflow.com/questions/17050022/… 然后你可以像这样访问它:{{ meta.title }}

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


【解决方案1】:

您必须找到解决此问题的方法,无论是在您的模型中还是在您的视图中,这取决于您选择的方法,它会改变您的更改范围。

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 }}

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2015-03-13
    • 2013-01-25
    • 2016-01-08
    • 1970-01-01
    • 2012-05-25
    相关资源
    最近更新 更多