我发现自己非常需要这个,我想知道为什么没有将它添加到框架中的背后有什么理由。
我认为用例将是丰富而明显的。 Ember.Object 向普通对象添加了大量元数据和额外属性,因此如果您想使用迭代对象属性的通用函数对对象进行操作,那么这些属性确实会妨碍您。
我想这取决于你如何使用框架。 我个人从未发现过这种需求,我唯一能想象到的情况是用于对象序列化,并且我使用了 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
。 这似乎很愚蠢,并且有一个功能来做到这一点会很棒......
最有用的评论
需要 pojo 的最大原因是 3rd 方库支持。 数据表、jstree 等都需要纯 javascript 数组和对象,并且会因 ember 数据结构而爆炸。