2013-02-25 4 views
1

Я не могу понять, как выводить свойства связанных моделей в представления. Модели определяются следующим образом:Ember.js: Доступ к связанным свойствам модели

клуб Модель

App.Club = DS.Model.extend({ 
    name: DS.attr('string'), 
    slug: DS.attr('string'), 
    ... // Rest of omitted attributes 

    province: DS.belongsTo('App.Province'), 
    city: DS.belongsTo('App.City'), 
    servicetable: DS.belongsTo('App.Servicetable'), 
    timetable: DS.belongsTo('App.Timetable'), 
    pricetable: DS.belongsTo('App.Pricetable') 
}); 

Servicetable Модель, которая принадлежит Club

App.Servicetable = DS.Model.extend({ 
    labels: { 
     parking: 'Parking', 
     bikeParking: 'Aparcamiento para bicicletas', 
     shower: 'Duchas', 
     materialRenting: 'Alquiler de Material', 
     restaurantCoffeeshop: 'Restaurante/Cafetería', 
     shop: 'Tienda', 
     playschool: 'Guardería', 
     locker: 'Taquillas', 
     handicapped: 'Acceso minusválidos', 
     sauna: 'Sauna', 
     wifi: 'WiFi'  
    }, 
    parking: DS.attr('boolean'), 
    bikeParking: DS.attr('boolean'), 
    shower: DS.attr('boolean'), 
    materialRenting: DS.attr('boolean'), 
    restaurantCoffeeshop: DS.attr('boolean'), 
    shop: DS.attr('boolean'), 
    playschool: DS.attr('boolean'), 
    locker: DS.attr('boolean'), 
    handicapped: DS.attr('boolean'), 
    sauna: DS.attr('boolean'), 
    wifi: DS.attr('boolean'), 

    club: DS.belongsTo('App.Club') 
}); 

Теперь выход для api/clubs/2 заключается в следующем. Обратите внимание, что servicetable в настоящее время загружен на, чтобы уменьшить количество запросов:

{ 
    "club": { 
     "id": "2", 
     "name": "Club de P\u00e1del y Tenis Fuencarral", 
     "slug": "club-de-padel-y-tenis-fuencarral", 
     ... // Rest of omitted attributes 
    }, 
    "servicetable": { 
     "id": "2", 
     "club_id": "2", 
     "parking": "1", 
     "bike_parking": "0", 
     "shower": "1", 
     "material_renting": "1", 
     "restaurant_coffeeshop": "1", 
     "shop": "1", 
     "playschool": "0", 
     "locker": "0", 
     "handicapped": "0", 
     "sauna": "0", 
     "wifi": "0" 
    } 
} 

Наконец, маршрут и шаблон:

App.ClubGeneralInfoRoute = Em.Route.extend({ 
    setupController: function(controller) { 
     controller.set('content', App.Club.find(App.clubId)); 
    } 
}); 

<script type="text/x-handlebars" data-template-name="club/general-info"> 
    <h1>Club Info</h1> 
    <label>Parking</label> 
    {{view Ember.Checkbox checkedBinding="content.servicetable.parking"}} 
</script> 

Так что, когда я загрузить страницу, я могу видеть шаблон рендеринга как появляется <h1>, но свойства Servicetable нет.

Обратите внимание, что если я попытаюсь отобразить прямые Club атрибуты, такие как name или slug в этом шаблоне, они тоже работают.

Любые предложения?

ответ

0

Если вы находитесь на боковой загрузке, вам необходимо настроить адаптер, чтобы сделать это.

DS.RESTAdapter.configure('App.Servicetable', { 
    sideloadAs: 'servicetables' 
}); 

Далее необходимо включить servicetableid в club «s JSON:

"club": { 
    "id": "2", 
    "servicetable_id": 2, 
    ... // Rest of attributes 
} 

Когда боковые записи груза, передавать их в виде массива, и установить ключ в форме множественного числа:

"servicetables": [{ 
    "id": "2", 
    ... // Rest of attributes 
}] 

Наконец, полный ответ JSON должен выглядеть следующим образом:

{ 
    "club": { 
     "id": "2", 
     "servicetable_id": 2, 
     "name": "Club de P\u00e1del y Tenis Fuencarral", 
     "slug": "club-de-padel-y-tenis-fuencarral", 
     ... // Rest of attributes 
    }, 

    "servicetables": [{ 
     "id": "2", 
     "club_id": "2", 
     "parking": "1", 
     ... // Rest of attributes 
    }] 
} 
+0

Тедди, я думаю, что ваш ответ ориентирован на ** hasMany ** отношения, и я использую соотношение 1: 1 (** принадлежит **). Так ли имеет смысл создавать массив «servicetables», в то время как он ожидает получить только один? –

+0

Записи с боковой загрузкой загружаются одинаково в 'hasMany' и' принадлежит To'. Разница заключается только в том, как вы включаете его в 'club':' "servicetable_id": 2' для 'belongsTo' и' "servicetable_ids": [2] 'for' hasMany'. Вы попробовали мое решение? –

+0

Я сделал, и это не сработало. Однако, после вашего ответа, я добавил 'servicetable_id' в главный« клуб »JSON и загрузил« servicetable »в качестве корневого объекта (а не массива), и он работал, поэтому я отмечаю его как действительный ответ. –

Смежные вопросы