1

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

ただし、新しい人が作成されるたびに 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}}

コードの 2 番目のバージョン (行のあるバージョン) を使用すると、@set('content', App.store.findAll(App.Annotation))すべての Person オブジェクトに対して clientId が複製されます。最初のバージョンでは、クライアント ID は正しいです。

誰かがここで光を当てることができますか? 私はこれを正しくやっていますか?私の本能はこれがバグだと言っていますが、よくわかりません。

4

2 に答える 2

4

I think it is a bug. I posted a related issue that illustrates this issue.

于 2011-12-29T07:19:17.923 に答える
0

#collection代わりにビューを使用してみてください。

ToDo の例のコードを参照してください。一部のドキュメントについては、http: //guides.sproutcore20.com/using_handlebars.htmlセクション 5も参照してください。

お役に立てれば。

于 2011-12-29T21:28:37.010 に答える