如何在ember-resource中创建嵌套的ResourceCollections - 这是正确的方法吗?

时间:2012-05-06 22:21:50

标签: javascript ember.js

我目前正在使用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
    }
});

只要我最初在数据库中提供“完整”模型,一切正常,i。即具有空注释模型的任务。在这种情况下,我可以使用

为任务添加注释
    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资源读取数据时使用的方法。

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

0 个答案:

没有答案