3

到目前为止,我们可以使用计算属性执行以下操作。

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/。但这再次解释了深刻的观察。

更新:PS 我知道 {field.values.length} 是无效的 javascript,我只是想展示我想要实现的目标。意味着观察类似于 ember 的嵌套属性

fieldLength: Ember.computed('field.values.[]', {
get(){}, set(){}
})
4

1 回答 1

2

简短的回答是否定的——在 Svelte 中,更改是在顶层(组件或商店)跟踪的,因为单独监控嵌套属性将涉及更多代码和内部簿记。每当更改fieldLength时都会重新计算field(其中“更改”可能意味着新对象或现有对象的突变,除非您使用不可变选项)。但是,除非长度发生变化,否则不会更新任何依赖的内容。fieldLength

更长的答案是({field.values.length}) => ...无效的 JavaScript,但有一种有效的(如果看起来很混乱)方式来表达相同的想法:

fieldLength: ({field:{values:{length}}}) => length

Svelte的未来版本可能会跟踪嵌套属性,并且仅在它们更改时重新计算值——如果是这样,它将通过使用该解构语法来确定哪些嵌套属性是依赖项。但无论我们未来的意图如何,这都是一种适用于今天的方法,尽管偶尔会进行不必要的重新计算。

于 2018-10-23T12:58:49.143 回答