На данный момент мы можем сделать следующее, используя вычисленные свойства.
isTypeRange: ({ field }) => {
return field && field.type === "Range";
}
Можем ли мы сделать что-нибудь подобное?
fieldLength: ({field.values.length}) => {
return field.values.length;
}
Переход по этой ссылке https://github.com/sveltejs/svelte/issues/11 в конечном итоге привел меня к https://github.com/sveltejs/svelte-extras/. Но это снова объясняет глубокое наблюдение.
Обновлять: P.S. Я знаю, что {field.values.length} недействителен javascript, я просто пытаюсь показать, чего я хочу достичь. Это означает наблюдение за вложенными свойствами, аналогичными тому, как это делает Ember.
fieldLength: Ember.computed('field.values.[]', {
get(){}, set(){}
})
Короткий ответ - нет - в Svelte изменения отслеживаются на верхнем уровне (компонента или хранить), поскольку отдельный мониторинг вложенных свойств потребует гораздо большего количества кода и внутренней бухгалтерии. Таким образом, fieldLength
будет пересчитываться при каждом изменении field
(где «изменение» может означать либо новый объект, либо мутацию существующего, если вы не используете параметр неизменный). Однако ничего, что зависит от на fieldLength
не будет обновляться, если только длина не изменилась.
Более длинный ответ заключается в том, что ({field.values.length}) => ...
- это недопустимый JavaScript, но есть действительный (хотя и выглядит сбивающим с толку) способ выразить ту же идею:
fieldLength: ({field:{values:{length}}}) => length
Это возможный, чтобы будущие версии Svelte могли отслеживать вложенные свойства и пересчитывать значения только при их изменении - в таком случае он мог бы выяснить, какие вложенные свойства были зависимостями, используя этот синтаксис деструктуризации. Но независимо от наших будущих намерений, этот подход будет работать сегодня, хотя и с периодическим ненужным пересчетом.