2011-12-29 4 views
1

Я пытаюсь использовать данные ember с использованием https://github.com/emberjs/data в качестве ссылки.Данные Ember: правильный способ использования findAll

В частности, я пытаюсь использовать контроллер массива для отображения всех объектов «Person» в моей базе данных. Я также хочу разрешить пользователю создавать новый «Человек».

У меня есть следующий код, который работает:

App.peopleController = Em.ArrayController.create 
    content: App.store.findAll(App.Person) 

    newPerson: (name) -> 
    App.store.create App.Person, 
     name: name 
    @set('content', App.store.findAll(App.Annotation)) 

Однако, как представляется неэффективным переустанавливать свойству Content каждый раз, когда создается новый человек. Если удалить последнюю строку и изменить код на следующее:

App.peopleController = Em.ArrayController.create 
    content: App.store.findAll(App.Person) 

    newPerson: (name) -> 
    App.store.create App.Person, 
     name: name 

Новый взгляд еще создан когда-либо newPerson вызова, но и тот же объект дублируется. Существенно, что происходит, все новые шаблоны каждый раз используют первый объект, созданный вместо нового. Я думаю, что это связано со следующей ошибкой: https://github.com/emberjs/data/issues/11.

Для справки, мой шаблон логика выглядит следующим образом:

{{#each App.peopleController}} 
    {{#view App.PersonView contentBinding="this"}} 
    {{#with content}} 
     Client id is {{clientId}} 
    {{/with}} 
    {{/view}} 
{{/each}} 

Когда я использую вторую версию моего code-- один с @set('content', App.store.findAll(App.Annotation)) line-- ClientId дублируется для каждого объекта Person. В первой версии идентификаторы клиента верны.

Может ли кто-нибудь пролить свет здесь? Правильно ли я делаю это? Мои инстинкты говорят мне, что это ошибка, но я не уверен.

ответ

4

Я думаю, что это ошибка. Я опубликовал related issue, который иллюстрирует эту проблему.

+0

Спасибо, надеюсь, скоро это исправится. – ghempton

+4

Была ошибка. Пришел исправление и представил запрос на перенос для этой проблемы: https://github.com/emberjs/data/issues/11. – ghempton

0

Попробуйте вместо этого использовать вид #collection.

См. Код примера ToDo. Также см. Раздел http://guides.sproutcore20.com/using_handlebars.html для части документации.

Надеюсь, это поможет.

+0

Я пробовал это на всякий случай, но он все еще не работает и имеет те же проблемы. По моему мнению, '# collection' является просто сокращением для' # each', за которым следует создание представления для каждого элемента в базовой коллекции. – ghempton