始终嵌入的 Ember 数据多级层次结构 [英] Ember data multi level hierarchy with embedded always

查看:23
本文介绍了始终嵌入的 Ember 数据多级层次结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我总是能够将嵌入式用于一个级别,但我无法将它用于两级深度模型.需要紧急帮助

I am able to use embedded always for one level but I am unable to use it for two level deep model. Need an urgent help

App.Post = DS.Model.extend(
  title: DS.attr("string")
  comment: DS.belongsTo("App.Comment")
)

App.Comment = DS.Model.extend(
  text: DS.attr("string")
  ferment: DS.belongsTo("App.Ferment") 
)

App.Ferment = DS.Model.extend(
  fermenter: DS.attr("string")
)

App.Adapter.map App.Post,
  'comment':
    embedded: "always"


App.Adapter.map App.Comment,    
  ferment :
    embedded: "always"

# -----------------------------
App.store = App.Store.create(
  adapter: App.Adapter.create()
)
# -----------------------------

App.store.adapter.load App.store, App.Post,
  id: 12
  comment: {text: "blabla", ferment:{fermenter:'abcd'}}

console.log App.Post.find(12).get("comment.text")
console.log App.Post.find(12).get("comment.ferment.fermenter")

我得到了comment.text的日志为blabla但不能让第二部分工作.我正在使用 Ember 数据存储的修订版 11.任何有类似问题/解决方案的人.

I get log for comment.text as blabla But cannot get second part to work. I am using revision 11 of Ember data store. Any one with similar problem/solution.

有趣的是,我们尝试了hasMany,所以发布-hasMany-> 评论,评论-hasOne-> 发酵.这很好用,这是代码.

Interestingly we tried hasMany so Post -hasMany-> Comments, Comment -hasOne-> Ferment. This works fine, here is the code.

App.Post = DS.Model.extend(
  title: DS.attr("string")
  comments: DS.hasMany("App.Comment")
)

App.Comment = DS.Model.extend(
  text: DS.attr("string")
  ferment: DS.belongsTo("App.Ferment")
)

App.Ferment = DS.Model.extend(
  fermi: DS.attr("string")
)

App.Adapter.map App.Post,
  comments:
    embedded: "always"

App.Adapter.map App.Comment,
  ferment:
    embedded: "always"

App.store = App.Store.create(
  adapter: App.Adapter.create()
)

# App.store.adapter.serializer.configure(App.Comment,
#   sideloadAs: 'comments' 
# )
App.store.adapter.load App.store, App.Post,
  id: 12
  comments: [{text: "blabla", ferment:{fermi: "found fermi"}}]

console.log App.Post.find(12).get("comments.firstObject.text")
console.log App.Post.find(12).get("comments.firstObject.ferment.fermi")

推荐答案

在 ember-rails 中仍然存在一些错误修复:我们因功能而受苦

There is still some bug fixes left in ember-rails: We suffered because of the function

extractEmbeddedBelongsTo: function(loader, relationship, data, parent, prematerialized)     {
var reference = this.extractRecordRepresentation(loader, relationship.type, data, true);
prematerialized[relationship.key] = reference;

// If the embedded record should also be saved back when serializing the parent,
// make sure we set its parent since it will not have an ID.
var embeddedType = this.embeddedType(parent.type, relationship.key);
if (embeddedType === 'always') {
  reference.parent = parent;
}

}

BelongsTo 关系正在跳过嵌入对象的提取.错误的在这里:

BelongsTo relation is skipping the extraction of embedded objects. The wrong one is here:

extractEmbeddedBelongsTo: function(loader, relationship, data, parent, prematerialized) {
var reference = loader.sideload(relationship.type, data);
prematerialized[relationship.key] = reference;

// If the embedded record should also be saved back when serializing the parent,
// make sure we set its parent since it will not have an ID.
var embeddedType = this.embeddedType(parent.type, relationship.key);
if (embeddedType === 'always') {
  reference.parent = parent;
}

}

这篇关于始终嵌入的 Ember 数据多级层次结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆