Рендеринг подмодели магистрали в шаблоне руля

У меня есть модель и подмодель:

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 в контекст шаблона?


person kharandziuk    schedule 29.01.2014    source источник
comment
Что говорит ошибка? Как вы передаете обе модели в представление?   -  person Puigcerber    schedule 29.01.2014
comment
Проблема в том, что функция toJSON() не проходит рекурсивно по подмоделям. Вам придется реализовать это поведение; Это поможет :) stackoverflow.com/questions/17050022/ Затем вы можете просто получить к ней доступ следующим образом: {{ meta.title }}   -  person oamsel    schedule 29.01.2014


Ответы (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 }}

person kay.one    schedule 29.01.2014