backbone-relational FetchRelated ничего не получает

Попытка собрать обратное решение для очистки беспорядочного javascript в конечном итоге оказывается болезненным. Конечно, я делаю что-то не так, но не могу найти никакого решения. данные содержат много гаражей, которые имеют вложенную модель CarsType со следующими атрибутами (имя, описание). Каждый тип автомобиля используется один раз в гараже, но их можно найти во многих гаражах. carType сортируются произвольно для каждого гаража, поэтому таблица отношений car_type/garage name pack определяется следующим образом | идентификатор | идентификатор_гаража | car_type_id | положение |

Каждый тип автомобиля назначается многим механикам. каждый механик может работать во многих гаражах. таким образом, третий вложенный уровень представляет собой таблицу отношений mechanic_pack |mechanic_id|pack_id|

Бэкэнд — это рельсы 3.1, которые выплевывают Json.

Garage = Backbone.RelationalModel.extend({
    relations: [
        {
            type: Backbone.HasMany, 
            key: 'Packs',
            relatedModel: 'pack',
            collectionType: 'Packs',
            reverseRelation: {
              key: 'garage',
                includeInJSON: 'id' 
            }
        }
    ],

    initialize: function(attributes) {
        this.fetchRelated("packs");
      },

    url : function() {
      var base = 'garages';
      if (this.isNew()) return base;
      return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
    }
///... more method ...

});

пакеты коллекций определены в другом файле

Packs= Backbone.Collection.extend({
    model: Pack, 
    url: '/packs/list/:garage_id'
});

модель загружается правильно, но fetchRelated не загружается и не выдает никаких ошибок. Точка останова в Firebugs показывает, что toFetch всегда не определено

fetchRelated: function( key, options ) {
  options || ( options = {} );
  var rel = this.getRelation( key ),
  keyContents = rel && rel.keyContents,
  toFetch = keyContents && _.select( _.isArray( keyContents ) ? keyContents : [ keyContents ], function( item ) {
  var id = _.isString( item ) || _.isNumber( item ) ? item : item[      rel.relatedModel.prototype.idAttribute ];
  return id && !Backbone.Relational.store.find( rel.relatedModel, id );
  }, this );
  if ( toFetch && toFetch.length ) { 
......

Как мне вызвать fetchRelated?

2-й вопрос: Когда запрашивается гараж, рельсы отправляет полное дерево вложенных моделей. Есть ли способ заполнить вложенные модели backones из исходного ответа json? и иметь возможность манипулировать каждой вложенной моделью со своим представлением?


person Alpha    schedule 18.12.2011    source источник


Ответы (1)


  initialize: function(attributes) {
    this.fetchRelated("Packs");
  }

Кроме того, похоже, существует несоответствие между «пакетом» relatedModel и моделью, связанной с вашей коллекцией: Pack

Если это все еще не работает, вы пытались дать своему ключу имя, которое не совпадает с вашим collectionType ?

person Running Turtle    schedule 18.12.2011
comment
fetchRelated не инициирует никаких запросов к серверу с обоими вашими предложениями. Но на самом деле из-за структуры родительского json полного дерева я получаю доступ к коллекции. любое другое предложение? - person Alpha; 21.12.2011