gpt4 book ai didi

ember.js - 在 Ember.js 和 emberFire 中保存关系

转载 作者:行者123 更新时间:2023-12-02 21:38:23 24 4
gpt4 key购买 nike

假设我有两个模型,BookChapter

App.Book = DS.Model.extend
name: DS.attr 'string'
chapters: DS.hasMany 'chapters', async: true

App.Chapter = DS.Model.extend
name: DS.attr 'string'
book: DS.belongsTo 'book', async: true

使用 emberFire。

App.ApplicationAdapter = DS.FirebaseAdapter.extend
firebase: new Firebase('http://<my-firebase>.firebaseio.com/')

App.ApplicationSerializer = DS.FirebaseSerializer.extend()

根据the documentation on relationships ,使用 async: true 选项,Firebase 会期望我的数据如下所示。

{
'books': [{
'book_id_1': {
'name': 'Example',
'chapters': [{
'chapter_id_1': true
}]
}],
'chapters': [{
'chapter_id_1': {
'name': 'Chapter 1'
}
}]
}

我可以很好地保存Chapter,但是我似乎无法获取用新填充的Bookchapters属性创建章节

在 Chrome 控制台中:

var store = App.__container__.lookup('store:main')
store.find('book', 'book_id_1').then(function(b) { window.book = b });

var chapter = store.createRecord('chapter', { name: 'Chapter 1' });

chapter.save().then(function() { // Saves the chapter
book.get('chapters').then(function(chapters) {
chapters.addObject(chapter);
book.save(); // Doesn't append to the chapters object
}
});

上面的代码没有按照我期望的方式将chapters属性保存在book上。任何帮助将不胜感激。

<小时/>

编辑

看起来将chapter对象添加到book.chapters属性的正确方法是:

book.get('chapters').then(function(chapters) {
chapters.addObject(chapter);
book.save().then(function() {
chapter.save();
});
});

但是,如果 chapter 对象存在验证错误,它将被添加到 book.chapters 属性中,但不会被保存(创建无效引用) 。你如何解决这个问题?

最佳答案

Ember-Data 有一个奇怪的细微差别,如果某个关系从一个关系定义为 hasMany 并将相应的记录定义为 belongsTo,那么它只发送属性(如果它是) 属于。话虽这么说,您需要调用chapter.save()。我其实很讨厌这个,之前也提示过,但我一直懒得提交拉取请求。

关于ember.js - 在 Ember.js 和 emberFire 中保存关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22876229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com