我目前正在使用 ember.js、ember-resource 和 couchdb 开发一个应用程序。
在我的数据模型中,我有一些嵌套资源,例如
MyApp.Task = Ember.Resource.define({
url: '/tasks',
schema: {
id: String,
_rev: String,
title: String,
description: String,
comments: {
type: Ember.ResourceCollection,
itemType: 'MyApp.Comment',
nested: true
}
});
MyApp.Comment = Ember.Resource.define({
url: null,
schema: {
created: Date,
start: Number,
end: Number,
text: String
}
});
只要我最初在数据库中提供了一个“完整”模型,即具有空注释模型的任务,一切都可以正常工作。在这种情况下,我可以向任务添加评论
var newComment = MyApp.Comment.create({ created: created, start: start, end: end, text: text });
var comments = task.get('comments');
comments.pushObject(newComment);
但是,我的初始task
数据没有嵌入的comments
,所以我必须以Ember.ResourceCollection
编程方式为嵌套注释创建。
我尝试了不同的方法并试图在 ember-resource 规范中找到一些代码,但我的尝试都没有奏效。
我最新的方法是
var comments = this.get('comments');
if (!comments) {
comments = Ember.ResourceCollection.create({type: MyApp.Comment, content: []});
this.set('comments', comments);
}
comments.pushObject(newComment);
但这也行不通。
所以我的问题是:如何在其中创建嵌套模型结构ember-resource
并将其保存到数据库中?
非常感谢任何提示!
更新:
在浏览了源代码后,ember-resource
我想出了一种解决问题的方法:
var comments = this.get('comments');
if (!comments) {
this.updateWithApiData({comments: []});
comments = this.get('comments');
}
comments.pushObject(newComment);
该方法updateWithApiData
似乎是从 REST 资源读取数据时使用的方法。
我仍然想知道这是否是最好/正确的方法......