Должен ли я цеплять 'get ()' s в Ember, или я могу использовать точечную нотацию?
Должен ли я использовать:
this.get('controller').get('simpleSearch').get('selectedOptions').get('height')
или
this.get('controller.simpleSearch.selectedOptions.height')
Я думаю, что первый-это он... многословный. Есть ли какая-то причина не использовать второй метод?
Ответы - Должен ли я цеплять 'get ()' s в Ember, или я могу использовать точечную нотацию? / Should I chain `get()`s in Ember, or can I use dot notation?

27.02.2014 07:18:19
Не могу вспомнить, где я читал это на сайте ember, но они предположили, что лучшим решением была точечная нотация.
this.get('controller.simpleSearch.selectedOptions.height')

24.01.2016 07:02:22
В погоне за ответом я нашел эту тему: окончательное руководство по использованию .давай же discuss.emberjs.com -да .
Согласно ответу Гордона Кристана:
Всегда используйте 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');
Кроме того, как указывает Кристофер:
Использование
obj.get('very.deeply.nested.property')
приведет только к появлению неопределенная ошибка, еслиobj
равноundefined
. Если любое другое свойство в цепочка - этоundefined
, тогда вызов наget()
просто вернетсяundefined
. Если вместо этого вы вызвалиget()
на каждом уровне, то это выдаст ошибку, если какой-либо уровень былundefined
.
Если вы хотите прочитать источник, проверьте ember-metal/lib/property_get .

11.05.2020 01:11:07
Современные Javascript / Браузеры позволяют использовать нотацию .
даже без необходимости делать get
. Вы также можете посмотреть на необязательную цепочку, которая позволяет разрешить значения null
пузыриться без ошибок.
Например:
// 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