保存Ember-数据记录
Saving Ember-Data records
问题:
- 这行代码
_activeAuthor.get('books').pushObject(book).save();
在 Chrome 中处理无误,但该书未添加到 Ember-Data 的 _activeAuthor 实例的书本 属性 .我不明白为什么?
- 下面的代码将创建的 Book 添加到 Chapter 实例的 Book 属性(见注释)。它是一对多关系(参见模型)。 Ember-数据似乎自动填充 Book 实例上的相关记录。这是 Ember-Data 的正常行为吗?我应该让 Ember-Data 填充一对多关系的相关方,还是应该指定双方并保留两个实例?
- 我怀疑以下代码的问题之一是我没有正确处理承诺。这段代码:
this.modelFor('user').get('latestChapter');
似乎是 return 的一个承诺。我应该如何处理 get()
的承诺?
代码:
createChapter: function() {
//Getting the Author of the latestChapter or getting the first Author in the array
var _activeAuthor = null;
var authors = this.modelFor('user').get('authors').toArray();
var latestChapter = this.modelFor('user').get('latestChapter');
var latestAuthor = latestChapter.get('author');
if (latestChapter.content) {
_activeAuthor = latestAuthor;
} else {
_activeAuthor= authors[0];
}
var book = this.store.createRecord('book', {
title: 'click here to name your book',
author: _activeAuthor,
});
var chapter = this.store.createRecord('chapter', {
title: 'Click here to name your chapter',
book: book, // Add the created Book to the Book property of the Chapter instance
});
_activeAuthor.get('books').pushObject(book).save();
chapter.save();
book.save();
this.modelFor('user').set('latestChapter', chapter).save() //Identifying the latest created chapter at the lastestChapter;
console.log('New chapter created: ' + chapter.get('id'));
},
型号:
App.Author = DS.Model.extend({
type: DS.attr('string'),
authorTitle: DS.attr('string'),
userTitle: DS.attr('string'),
description: DS.attr('string'),
user: DS.belongsTo('user', {inverse: 'authors', async: true}),
books: DS.hasMany('book', { inverse: 'author', async: true}),
});
App.Book = DS.Model.extend({
title: DS.attr('string'),
icon: DS.attr('string'),
description: DS.attr('string'),
frequency: DS.attr('string'),
chapters: DS.hasMany('chapter', { inverse: 'book', async: true}),
author: DS.belongsTo('author', { inverse: 'books', async: true}),
});
App.Chapter = DS.Model.extend({
title: DS.attr('string'),
description: DS.attr('string'),
frequency: DS.attr('string'),
unit: DS.attr('string'),
aggregationMode: DS.attr('string'),
dashboard: DS.attr('boolean'),
statData : DS.attr('array'),
book: DS.belongsTo('book', { inverse: 'chapters', async: true}),
});
谢谢!
1。
author.get('books')
会 return 一个承诺,所以你可能想要做的是
author.get('books').then(function(books) {
books.pushObject(book)
});
author.save();
如果这不是问题,你能提供一个包含整个应用程序代码的 jsfiddle 吗?那样的话,帮忙就容易多了! :)
2。
每次你 get
模型的 属性 即 async
而不是 isLoaded
(未与服务器同步)时,ember 将询问服务器,是的,将填充商店中的记录,这是一种理想的行为:)
3。
如果你有一个 async
模型 属性,那么你总是会得到一个承诺,所以你应该这样处理它:
chapter.get('book').then(function(book) {
// here's a book
});
顺便说一句 var latestAuthor = latestChapter.get('author');
-> chapter
没有 author
属性 :)
问题:
- 这行代码
_activeAuthor.get('books').pushObject(book).save();
在 Chrome 中处理无误,但该书未添加到 Ember-Data 的 _activeAuthor 实例的书本 属性 .我不明白为什么? - 下面的代码将创建的 Book 添加到 Chapter 实例的 Book 属性(见注释)。它是一对多关系(参见模型)。 Ember-数据似乎自动填充 Book 实例上的相关记录。这是 Ember-Data 的正常行为吗?我应该让 Ember-Data 填充一对多关系的相关方,还是应该指定双方并保留两个实例?
- 我怀疑以下代码的问题之一是我没有正确处理承诺。这段代码:
this.modelFor('user').get('latestChapter');
似乎是 return 的一个承诺。我应该如何处理get()
的承诺?
代码:
createChapter: function() {
//Getting the Author of the latestChapter or getting the first Author in the array
var _activeAuthor = null;
var authors = this.modelFor('user').get('authors').toArray();
var latestChapter = this.modelFor('user').get('latestChapter');
var latestAuthor = latestChapter.get('author');
if (latestChapter.content) {
_activeAuthor = latestAuthor;
} else {
_activeAuthor= authors[0];
}
var book = this.store.createRecord('book', {
title: 'click here to name your book',
author: _activeAuthor,
});
var chapter = this.store.createRecord('chapter', {
title: 'Click here to name your chapter',
book: book, // Add the created Book to the Book property of the Chapter instance
});
_activeAuthor.get('books').pushObject(book).save();
chapter.save();
book.save();
this.modelFor('user').set('latestChapter', chapter).save() //Identifying the latest created chapter at the lastestChapter;
console.log('New chapter created: ' + chapter.get('id'));
},
型号:
App.Author = DS.Model.extend({
type: DS.attr('string'),
authorTitle: DS.attr('string'),
userTitle: DS.attr('string'),
description: DS.attr('string'),
user: DS.belongsTo('user', {inverse: 'authors', async: true}),
books: DS.hasMany('book', { inverse: 'author', async: true}),
});
App.Book = DS.Model.extend({
title: DS.attr('string'),
icon: DS.attr('string'),
description: DS.attr('string'),
frequency: DS.attr('string'),
chapters: DS.hasMany('chapter', { inverse: 'book', async: true}),
author: DS.belongsTo('author', { inverse: 'books', async: true}),
});
App.Chapter = DS.Model.extend({
title: DS.attr('string'),
description: DS.attr('string'),
frequency: DS.attr('string'),
unit: DS.attr('string'),
aggregationMode: DS.attr('string'),
dashboard: DS.attr('boolean'),
statData : DS.attr('array'),
book: DS.belongsTo('book', { inverse: 'chapters', async: true}),
});
谢谢!
1。
author.get('books')
会 return 一个承诺,所以你可能想要做的是
author.get('books').then(function(books) {
books.pushObject(book)
});
author.save();
如果这不是问题,你能提供一个包含整个应用程序代码的 jsfiddle 吗?那样的话,帮忙就容易多了! :)
2。
每次你 get
模型的 属性 即 async
而不是 isLoaded
(未与服务器同步)时,ember 将询问服务器,是的,将填充商店中的记录,这是一种理想的行为:)
3。
如果你有一个 async
模型 属性,那么你总是会得到一个承诺,所以你应该这样处理它:
chapter.get('book').then(function(book) {
// here's a book
});
顺便说一句 var latestAuthor = latestChapter.get('author');
-> chapter
没有 author
属性 :)