2011-12-29 8 views
1

https://github.com/emberjs/dataを参照としてember-dataを使用しようとしています。Emberデータ:findAllを使用する適切な方法

具体的には、アレイコントローラを使用して、データベース内のすべての「Person」オブジェクトを表示しようとしています。私はまた、ユーザーが新しい「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}} 

を私はのclientIdがすべてのPersonオブジェクトのために複製されline--私は@set('content', App.store.findAll(App.Annotation))と一つにcode--の第二のバージョンを使用する場合:次のように

は参考までに、私のテンプレートロジックがあります。最初のバージョンでは、クライアントIDが正しいです。

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

答えて

4

私はバグだと思います。この問題を説明するrelated issueを投稿しました。

+0

ありがとう、うまくいけば、これはすぐに修正されます。 – ghempton

+4

バグでした。修正プログラムを用意して、この問題のプルリクエストを提出しました:https://github.com/emberjs/data/issues/11。 – ghempton

0

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

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

これが役に立ちます。

+0

私はこれを試してみましたが、まだ動作せず、同じ問題があります。私の理解では、 '#collection'は単に'#each'を省略して、基本となるコレクションの各要素のビューを作成しています。 – ghempton

関連する問題