1

我目前正在使用 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 资源读取数据时使用的方法。

我仍然想知道这是否是最好/正确的方法......

4

0 回答 0