应该在Ember中链接`get()`,还是可以使用点符号?

问题描述 投票:5回答:3

我应该使用:

this.get('controller').get('simpleSearch').get('selectedOptions').get('height')

this.get('controller.simpleSearch.selectedOptions.height')

我认为第一个是...冗长。是否有任何理由not使用第二种方法?

ember.js
3个回答
2
投票
根据gordon_kristananswer

始终使用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')只会抛出一个如果objundefined,则发生不确定的错误。如果在链是undefined,则对get()的调用只会返回undefined。相反,如果您在每个级别都调用了get(),那么它如果任何级别为undefined,都会抛出错误。

如果您想阅读源代码,请签出ember-metal/lib/property_get

3
投票
this.get('controller.simpleSearch.selectedOptions.height')

0
投票
例如:

// 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

© www.soinside.com 2019 - 2024. All rights reserved.