我应该使用:
this.get('controller').get('simpleSearch').get('selectedOptions').get('height')
或
this.get('controller.simpleSearch.selectedOptions.height')
我认为第一个是...冗长。是否有任何理由not使用第二种方法?
始终使用get(),并以下列两种方式之一使用它:
// 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');
使用get()是确保Ember计算的唯一方法属性将始终正常运行。例如,在您的例如,考虑模型是否为PromiseObject(Ember-Data使用相当多):
// 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');
此外,christopher指出:
使用
obj.get('very.deeply.nested.property')
只会抛出一个如果obj
为undefined
,则发生不确定的错误。如果在链是undefined
,则对get()
的调用只会返回undefined
。相反,如果您在每个级别都调用了get()
,那么它如果任何级别为undefined
,都会抛出错误。如果您想阅读源代码,请签出ember-metal/lib/property_get。
this.get('controller.simpleSearch.selectedOptions.height')
// 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