問題
私は Ember を独学しており、子モデルの永続化に問題があります。問題を示す JSBin は次のとおりです。
http://jsbin.com/OnUXEti/2/edit?html,js,output
遊んでみると、投稿とコメントを作成できますが、ページのリロード後も投稿のみが利用可能です。(私は ember-data と localStorage アダプターを使用しています)
2 つのモデル タイプがありPost
、Comment
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/1
ID 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 のハンドルを取得していることに注意してください。コントローラー間の依存関係に関するドキュメントから引用。
これは一般的な状況であるため、すべてが間違っていると感じているため、モデルまたはルートを非標準の方法で設計したのではないかと思います。
ありがとう、マット