Как использовать данные модели в шаблоне?

Я создал FIXTURES с помощью ember-model и пытаюсь получить к нему доступ по шаблону, но это не показывает никакого результата, если я использую {{model.name}}. Он отлично работает с помощником each.

Я хочу получить доступ к одному узлу модели, например {{model.name}}, без использования помощника each.

Код моей модели:

Astcart.Home.FIXTURES=[
    {
        "id": "1",
        "logo_url": "img/logo.jpg",
        "name": "gau",
        "list": [
            {
                "id": "1",
                "name": "amit"
            },
            {
                "id": "2",
                "name": "amit1"
            }
        ]
    }
];

Мой код роутера:

  Astcart.HomeRoute = Ember.Route.extend({
    model: function() {
      return Astcart.Home.find();
    }
  });  

Мой шаблон:

<script type="text/x-handlebars" data-template-name="home"> 

    {{model.name}}

    <ul>
        {{#each item in model}}                                         
            <img  {{bindAttr src="item.logo_url"}}></img>               
            <li>{{item.name}}</li>
            {{#each item in item.list}} 
                <li>{{item.name}}</li>
            {{/each}}               
        {{/each}}
    </ul>
</script>

Я обновил свой код здесь


person Sachin    schedule 01.09.2013    source источник
comment
Вы можете создать jsbin только с той частью, которая не работает?   -  person intuitivepixel    schedule 02.09.2013
comment
@intuitivepixel: я обновил свой код на странице jsfiddle.net/sachin1989/d5bWS/7.   -  person Sachin    schedule 02.09.2013


Ответы (1)


Во-первых, вам нужно изменить имя шаблона на index или маршрут на Astcart.ApplicationRoute, потому что имя шаблона и имя маршрута должны совпадать.

Текущая конфигурация:

Маршрут

Astcart.IndexRoute

Шаблон

<script type="text/x-handlebars" data-template-name="application">

не работай.

find() без параметров выполнит find all data, и это всегда будет возвращать массив.

Если вам нужны отдельные данные, вы можете выбрать один из следующих вариантов:

1- Передайте идентификатор в методе поиска, но вам нужно знать идентификатор:

Astcart.Home.find(1);

Это вернет один объект, затем вы можете использовать {{model.name}} или {{name}} (поскольку контекст шаблона — model) без помощника представления each.

2- Получить первый объект массива:

{{#with model.firstObject as item}}
    <img  {{bindAttr src="item.logo_url"}}></img>               
    {{item.name}}
{{/with}}

Я надеюсь, что это помогает

person Marcio Junior    schedule 02.09.2013
comment
Родригес Корреа: Но как работать с объектом, который содержит как массив, так и одно значение? - person Sachin; 02.09.2013
comment
Хм, массив и сингл одновременно? Я не знаю, какова ваша цель, но я думаю, что было бы лучше на примере что-то вроде: у вас есть модель User и она принадлежит UserProfile (вместо Home), поэтому, когда вы входите в приложение, у вас будет подписанный пользователь и ваш профиль. Поэтому вместо Home.find(user_id) вы будете делать: model.userProfile.logo_url и т. д. - person Marcio Junior; 02.09.2013