// If obj is guaranteed to not be null or undefined
obj.get('very.deep.nested.property');
// If obj might be null or undefined, or if it's not an Ember object,
Ember.get(obj, 'very.deep.nested.property');
// This will not work, since it won't activate the `unknownProperty` handler on `model`
var startDate = parentView.controller.model.createdAt;
// But this will work
var startDate = Ember.get(parentView, 'controller.model.createdAt');
// All 3 are identical
x = this.get("property").get("value");
x = this.get("property.value");
x = this.property.value;
// Error!
x = this.nonexistent_property.value
// Sets x to null
x = this.nonexistent_property?.value
3条答案
按热度按时间woobm2wo1#
不记得我在哪里读到的ember网站,但他们建议最好的解决方案是点符号。
hjzp0vay2#
在寻找答案的过程中,我发现了这条线索:在discuss.emberjs.com上执行Definitive guide of when to use .get。
根据gordon_kristan的answer:
请始终使用get(),并以下列两种方式之一使用它:
使用get()是确保Ember计算属性始终正常工作的唯一方法。例如,在您的示例中,假设model是一个PromiseObject(Ember-Data经常使用它):
此外,正如christopher指出的:
使用
obj.get('very.deeply.nested.property')
只会在obj
为undefined
时掷回未定义的错误。如果链接中的任何其他属性为undefined
,则呼叫get()
只会传回undefined
。如果您在每个层级呼叫get()
,则任何层级为undefined
时都会掷回错误。如果你想阅读源代码,请查看ember-metal/lib/property_get。
oknwwptz3#
现代的Javascript/浏览器允许使用
.
表示法,甚至不必执行get
。您也可以研究Optional Chaining,它允许您在不出错的情况下冒泡null
值。例如: