Ember数据:使用findAll的正确方法

时间:2011-12-29 07:02:09

标签: ember.js ember-data

我正在尝试使用https://github.com/emberjs/data作为参考使用ember-data。

具体来说,我正在尝试使用数组控制器来显示数据库中的所有“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))

但是,每次创建新人时重置内容属性似乎效率低下。如果我删除最后一行并将代码更改为以下内容:

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}}

当我使用我的代码的第二个版本 - 具有@set('content', App.store.findAll(App.Annotation))行的代码时 - clientId对于每个Person对象都是重复的。在第一个版本中,客户端ID是正确的。

有人能在这里说清楚吗?我这样做了吗?我的直觉告诉我这是一个错误,但我不确定。

2 个答案:

答案 0 :(得分:4)

我认为这是一个错误。我发布了related issue来说明这个问题。

答案 1 :(得分:0)

请尝试使用#collection视图。

请参阅ToDo示例代码。有关一些文档,另请参阅http://guides.sproutcore20.com/using_handlebars.html第5节。

希望这有帮助。