使用列表控制器调用两次转换器
Converter called twice with list controller
我用标签小部件绑定了列表中的选定项目。我还添加了一个转换器来转换我的数据。尽管绑定是单向的 (http://www.qooxdoo.org/5.0.1/apiviewer/#qx.data.SingleValueBinding~bind),但转换器似乎被调用了两次。
这是一个code snippet。 Select 列表中的任何元素并检查浏览器的控制台。
不应该只调用一次吗?
我也在 Gitter 聊天中找到了这个相关的话题。用户的问题已解决,但无法解释为什么使用单向绑定调用转换器两次:
https://gitter.im/qooxdoo/qooxdoo?at=579b01dc1d6bf8244e2b5f71
这是一些非常古老的代码的副作用,可以说这是一个错误,但很可能是为了兼容性(我们在这里谈论 v1.x 之前的代码)和易用性而创建的; qx.data.controller.List
将在选择更改时触发额外的 "changeSelection" 事件。这听起来很自然,直到您认为 selection
属性 是一个对象,因此 属性 List.selection
根本没有改变- selection
数组对象的 内容 正在改变。
在您的示例中,绑定正在侦听 'selection[0]',这意味着它必须侦听对 List.selection
的更改以及对 [=12= 中数组内容的更改].因为 qx.controller.List
触发了额外的 'changeSelection',这会导致对转换器的额外调用。
在许多情况下,它的净效果被抑制并且没有被注意到,至少部分是因为绑定到其他属性将检测到该值已经设置,因此不会触发两次;这是一个替代 code snippet,它监听 Label.value 属性 的变化,在控制台中你可以看到当转换器被触发两次时,Label.value 属性 只触发一次。
我同意这是一个错误; I've filed it as an issue here 但问题是因为这是既定行为,如果我们停止触发 changeSelection
事件,很可能会破坏现有应用程序并使现有用户的升级路径更加困难。请随时参与有关该问题的讨论,以讨论最佳的前进方向。
我用标签小部件绑定了列表中的选定项目。我还添加了一个转换器来转换我的数据。尽管绑定是单向的 (http://www.qooxdoo.org/5.0.1/apiviewer/#qx.data.SingleValueBinding~bind),但转换器似乎被调用了两次。
这是一个code snippet。 Select 列表中的任何元素并检查浏览器的控制台。
不应该只调用一次吗?
我也在 Gitter 聊天中找到了这个相关的话题。用户的问题已解决,但无法解释为什么使用单向绑定调用转换器两次: https://gitter.im/qooxdoo/qooxdoo?at=579b01dc1d6bf8244e2b5f71
这是一些非常古老的代码的副作用,可以说这是一个错误,但很可能是为了兼容性(我们在这里谈论 v1.x 之前的代码)和易用性而创建的; qx.data.controller.List
将在选择更改时触发额外的 "changeSelection" 事件。这听起来很自然,直到您认为 selection
属性 是一个对象,因此 属性 List.selection
根本没有改变- selection
数组对象的 内容 正在改变。
在您的示例中,绑定正在侦听 'selection[0]',这意味着它必须侦听对 List.selection
的更改以及对 [=12= 中数组内容的更改].因为 qx.controller.List
触发了额外的 'changeSelection',这会导致对转换器的额外调用。
在许多情况下,它的净效果被抑制并且没有被注意到,至少部分是因为绑定到其他属性将检测到该值已经设置,因此不会触发两次;这是一个替代 code snippet,它监听 Label.value 属性 的变化,在控制台中你可以看到当转换器被触发两次时,Label.value 属性 只触发一次。
我同意这是一个错误; I've filed it as an issue here 但问题是因为这是既定行为,如果我们停止触发 changeSelection
事件,很可能会破坏现有应用程序并使现有用户的升级路径更加困难。请随时参与有关该问题的讨论,以讨论最佳的前进方向。