Ember.js: 是否有没有公共 API 将 Ember.Object 转换回原生 JS 对象的原因

创建于 2015-04-13  ·  10评论  ·  资料来源: emberjs/ember.js

我发现自己非常需要这个,我想知道为什么没有将它添加到框架中的背后有什么理由。

我认为用例将是丰富而明显的。 Ember.Object 向普通对象添加了大量元数据和额外属性,因此如果您想使用迭代对象属性的通用函数对对象进行操作,那么这些属性确实会妨碍您。

Needs Submitter Response

最有用的评论

需要 pojo 的最大原因是 3rd 方库支持。 数据表、jstree 等都需要纯 javascript 数组和对象,并且会因 ember 数据结构而爆炸。

所有10条评论

我想这取决于你如何使用框架。 我个人从未发现过这种需求,我唯一能想象到的情况是用于对象序列化,并且我使用了 ember-data,所以这种需求是不相关的。

也就是说,如果我确实遇到了这个问题,我会从使用Ember.ObjectProxy ,看看这让我走多远。 这是一个例子: http :

迭代对象属性的泛型函数

这就是hasOwnProperty的用途

随意使用, Ember.keys或多或少Object.keys

Ember.keys(Ember.Object.create({ foo: 1 }))
>  [ 'foo' ]

也就是说,如果我确实遇到了这个问题,我会从使用 Ember.ObjectProxy 开始,看看我能走多远。 这是一个例子: http :

我可能会建议不要这样做,为什么不直接使用pojo呢?

@stefanpenner我认为这确实是 OP 的问题。 我想我假设他有一个计算属性/函数/观察者/等的类。 我没有考虑过只用Ember.keys迭代,我认为这会包括课堂上的东西(我发誓在那天确实如此),但惊喜地发现它没有。

出于好奇,您为什么不建议使用Ember.ObjectProxy

编辑:澄清一下, Ember.keys解决方案要干净得多,并且得到了我的投票。 只是好奇您是否对ObjectProxy有任何负面想法。

有一些策略可以提取用于创建 ember 对象的原始“哈希”结构(有或没有修改的值),我的问题主要是关于一般 Ember.js 社区多久需要这个。 .nativeCopy方法在Ember.Object上会非常好,但我很欣赏有必要对 API 添加非常有选择性。 有时添加一种方法可以使极其常见的操作更加方便,有时则不然。 我感觉人们不像我那样经常遇到这种需求。

一个具体的例子,如果你好奇的话,是使用Ember.Object来支持“创建新的 […]”表单。 也许创建表单就在项目列表的正下方。 如果您使用this.store.createRecord创建一个空白模型来支持表单,它会立即将一个新项目添加到上面的列表中,并在您填写表单时填写值。 为了避免这种情况,我可能会创建一个Ember.Object来支持表单,但随后我必须将值一一取出以传递给createRecord

我经常这样做的最后一个原因是创建一个深层副本,因为实现Ember.Copyable是如此痛苦。 我喜欢Ember.Copyable的设计,但是一个理智的默认/通用实现真的非常好。

需要 pojo 的最大原因是 3rd 方库支持。 数据表、jstree 等都需要纯 javascript 数组和对象,并且会因 ember 数据结构而爆炸。

@ccarterc喜欢,例如 localforage.setItem - 它是带有 Ember.Object 的 PITA
今天面对它,不得不为此放置自定义的“转义符”。

今天遇到了这个确切的需求。 正如@ccarterc所说,这对于期待 POJO 的 3rd 方库至关重要。 有一个“官方”方法来做到这一点会很棒。

我希望能够使用 POJO,这样我就可以将我的对象发送到 3rd 方 vanilla JS 库中。

是的,请 - 现在为 3rd 方 api 苦苦挣扎。 我目前的解决方法是为一个包含大约 70 个字段的数组的对象执行getProperties 。 这似乎很愚蠢,并且有一个功能来做到这一点会很棒......

此页面是否有帮助?
0 / 5 - 0 等级