在使用ember v.1.12.0将ember-cli更新为v0.2.7后,我有一些有趣的行为,在使用计算属性时会导致异常。
使用过的型号:
User = Ember.Object.extend
md5: ""
gravatar: (->
return get_gravatar(@get("md5"))
).property("md5")
在路由器u.get("gravatar")
方法中调用afterModel
,我明白了:
u.get("gravatar")
ember.debug.js:15588 Uncaught TypeError: desc.get is not a function
at Object.get (../vendor.js:26142:19)
at exports.default.mixin.Mixin.create.get (../vendor.js:39811:27)
at eval (eval at evaluate (unknown source), <anonymous>:1:3)
at Object.InjectedScript._evaluateOn (<anonymous>:895:55)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluateOnCallFrame (<anonymous>:954:21)
at afterModel (../v4.js:3438:16)
at applyHook (../vendor.js:55667:32)
at Object.HandlerInfo.runSharedModelHook (../vendor.js:53668:22)
at Object.HandlerInfo.runAfterModelHook (../vendor.js:53651:21)
当深入挖掘时,我发现错误发生在getter函数的`ember.debug.js中。
function get(obj, keyName) {
...
if (desc) {
return desc.get(obj, keyName);
// -> Error while processing route: recipe_edit desc.get is not a function TypeError: desc.get is not a function
} else {
...
desc
的类型与我直接调用u.gravatar
时的类型相同,因此我不太清楚为什么不再解决此问题。
desc: Object
_cacheable: true
_dependentKeys: Array[1]
_readOnly: false
isDescriptor: true
__proto__: Object
答案 0 :(得分:0)
经过几个小时的调试后,我自己发现了问题。我有一个序列化程序,它解析循环引用并从我的Ember对象中删除所有不必要的属性,将其转换为JSON。
在之前的Ember版本中,它运行良好,但在这个版本中,递归函数以某种方式通过Object进入一些Ember Framework代码,并在运行时
ComputedPropertyPrototype.volatile()
ComputedPropertyPrototype.property()
exports.default.mixin.Mixin.create.clear()
exports.default.mixin.Mixin.create.popObject()
exports.default.mixin.Mixin.create.shiftObject()
...
因此,我得到了这些奇怪的声音错误并且难以调试错误,因为删除属性在实际导致错误之前发生。
对于hacky序列化程序来说,这是我的坏处,但我希望这可以帮助你们中的一些人遇到同样的错误。