Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 在把手模板中渲染主干子模型_Backbone.js_Marionette_Handlebars.js_Backbone Model - Fatal编程技术网

Backbone.js 在把手模板中渲染主干子模型

Backbone.js 在把手模板中渲染主干子模型,backbone.js,marionette,handlebars.js,backbone-model,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}); 我想通过车把模板渲染这个模型(视图代码是ommited) 模板如下所示: 字段:{{meta.get('titl

我有模型和子模型:

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

var metaField = new MetaField({ title: 'width' });
var field = new Field({ meta: metaField, value: 5});
我想通过车把模板渲染这个模型(视图代码是ommited)

模板如下所示:

字段:{{meta.get('title')}}值:{{value}
}


但是meta.get会导致错误(据我所知,在Handlebar中无法调用方法)。如何渲染元属性?我应该将MetaField对象抛出到模板上下文吗

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

1.在您的模型中 这将始终将元对象包含在序列化字段对象中。将模型发送到服务器或在任何视图中渲染时都将使用它

2.在你看来 这仅适用于视图,不会影响其他视图呈现模型或将模型发送到服务器的方式

模板 您可以像这样在模板中使用
meta
属性


字段:{{meta.title}}值:{{value}

错误是什么?如何将这两个模型传递给视图?问题是toJSON()函数不会递归地遍历子模型。你必须实施这种行为;这将有助于:)然后您可以像这样访问它:{{meta.title}
var Field = Backbone.Model.extend({
   toJSON : function(){
     var json = _.clone(this.attributes);
     if(this.get('meta'){
        json.meta = this.get('meta').toJSON();
     }
     return json;
   }
});
 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();
       }
    }

 });