gpt4 book ai didi

ember.js - 如何查看 hasMany 关系的内容?

转载 作者:行者123 更新时间:2023-12-01 10:39:26 25 4
gpt4 key购买 nike

我有一个模型,节点:

App.Node = DS.Model.extend({
parents: DS.hasMany('node', { inverse: null })
});

假设我的服务器发回部分树:

{ id: "A", parents: [ "C" ] }
{ id: "B", parents: [ "C", "D" ] }
{ id: "C", parents: [ "E" ] }

我想这样渲染:

A ---- C
/
B ---/

但是,当我调用 B.get('parents') 时,我收到一条消息:

Uncaught Error: Assertion Failed: You looked up the 'parents' relationship on a 'node' with id B but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (DS.hasMany({ async: true }))

这些都不是我想要的。我只想要图中加载的记录。

我最终可能也想渲染这样的东西:

A ---- C--?
/
B ---/--?

用 UI 元素表示不重要的 parent 。

有没有办法只查看关系中加载的记录?

最佳答案

好问题。

目前,Ember Data 无法满足此类用例。

an answer对于您的问题,但它现在已过时:API 已更改并且现在是私有(private)的。

如果你足够勇敢,你可以这样做:

App.Node = DS.Model.extend({
parent: DS.belongsTo('node', {inverse: 'children'}),
children: DS.hasMany('node', {inverse: 'parent'}),

childrenIds: Ember.computed(
'_internalModel._relationships.initializedRelationships.children.canonicalState.@each.ids',
function() {
var children =
this
._internalModel
._relationships
.initializedRelationships
.children;

if (!children) return [];

return children
.canonicalState
.mapBy('id');
}
),

availableChildren: Ember.computed('childrenIds', function () {
var childrenIds = this.get('childrenIds');
return this.store.all('node').filter(function(node) {
return childrenIds.indexOf(node.id) > -1;
});
})
});

演示:http://emberjs.jsbin.com/qugofu/1/edit?html,js,output

此代码的问题(除了使用私有(private) API 之外)是 availableChildren 属性不会在从服务器获取新节点时自动更新。

您必须想出一种方法来做到这一点。当你这样做时,将其作为插件发布!

UPD 2015-07-20

这个问题让我睡不着觉。

我已设法改进上述解决方案:

  1. 它现在会在商店中出现新记录时自动更新。
  2. 它也会在记录关系发生变化时更新。

缺点是查找可用节点发生在组件中而不是模型中。

演示:http://emberjs.jsbin.com/qugofu/2/edit?html,js,output

关于ember.js - 如何查看 hasMany 关系的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31488184/

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