Должен ли я цеплять 'get ()' s в Ember, или я могу использовать точечную нотацию?


Должен ли я цеплять 'get ()' s в Ember, или я могу использовать точечную нотацию?

27.02.2014 06:39:11 Просмотров 16 Источник

Должен ли я использовать:

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?

TrevTheDev

27.02.2014 07:18:19

Не могу вспомнить, где я читал это на сайте ember, но они предположили, что лучшим решением была точечная нотация.

this.get('controller.simpleSearch.selectedOptions.height')
Является ответом!
Max Wallace

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 .

Addison

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
Помочь в развитии проекта:
Закрыть X