【发布时间】:2013-09-18 12:25:57
【问题描述】:
问题
我正在自学 Ember,但在坚持我的子模型时遇到了问题。这是一个演示问题的 JSBin:
http://jsbin.com/OnUXEti/2/edit?html,js,output
如果您使用它,您将能够创建帖子和评论,但只有帖子在页面重新加载后仍然可用。 (我正在使用 ember-data 和 localStorage 适配器)
有两种模型类型,Post 和 Comment
App.Post = DS.Model.extend({
title: DS.attr('string'),
comments: DS.hasMany('comment')
});
App.Comment = DS.Model.extend({
message: DS.attr('string')
});
每个帖子都有一组评论。 我打算有以下网址:
-
/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 示例,您将看到您可以创建 cmets,但在重新加载页面时它们不会持久化。
我尝试在 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 的句柄。取自documentation about dependencies between controllers。
这一切都感觉不对,因为它应该是一种常见的情况,所以我怀疑我以非标准方式设计了我的模型或路线。
谢谢, 马特
【问题讨论】:
-
我看到了问题,我正在尝试您的小提琴...您的模型似乎正在更新,但您的帖子模型似乎没有得到反映...映射到您的评论对象...
标签: ember.js ember-data