5

問題

私は Ember を独学しており、子モデルの永続化に問題があります。問題を示す JSBin は次のとおりです。

http://jsbin.com/OnUXEti/2/edit?html,js,output

遊んでみると、投稿とコメントを作成できますが、ページのリロード後も投稿のみが利用可能です。(私は ember-data と localStorage アダプターを使用しています)


2 つのモデル タイプがありPostComment

App.Post = DS.Model.extend({
  title: DS.attr('string'),
  comments: DS.hasMany('comment')
});

App.Comment = DS.Model.extend({
  message: DS.attr('string')
});

各投稿にはコメントの配列があります。次の URL を予定しています。

  • /postsすべての投稿を一覧表示します
  • /posts/1ID 1 の投稿を表示します
  • /posts/1/comments投稿 1 のコメントが表示されます

ルートは次のように定義されます。

App.Router.map(function() {
  this.resource("posts", { path: "/posts" });
  this.resource("post", { path: "/posts/:post_id" }, function() {
    this.resource("comments", { path: "/comments" });
  });
});

Post モデルをストアに問題なく書き込むことができます。私ができないことは、コメント モデルを保存することです。上記の JSBin の例を試してみると、コメントを作成できることがわかりますが、ページをリロードするとコメントは保持されません。

CommentsController にコメントを保存しようとしています。

App.CommentsController = Ember.ArrayController.extend({
    needs: "post",
    post: Ember.computed.alias("controllers.post"),
    newMessage: '',
    actions: {
        create: function() {
            var message = this.get('newMessage');

            var comment = this.store.createRecord('comment', {
                message : message
            });

            this.set('newMessage', '');

            var post = this.get('post');
            var comments = post.get('comments');
            comments.pushObject(comment);
            comment.save();
        }
    }
});

needsプロパティを使用して親 Post のハンドルを取得していることに注意してください。コントローラー間の依存関係に関するドキュメントから引用。

これは一般的な状況であるため、すべてが間違っていると感じているため、モデルまたはルートを非標準の方法で設計したのではないかと思います。

ありがとう、マット

4

1 に答える 1