我目前正在对一组spark表单元素使用数据绑定,并想知道我绑定的数据类是否是脏的。
如果spark“Form”元素会触发一个冒泡的变化事件并被火花“Form”捕获,那么可能可能。然后我可以向表单添加一个事件监听器。但我没有看到类似的东西。因此,除了将原始数据类的副本与绑定数据类进行比较或向每个表单元素添加更改事件并捕获该事件之外,知道类对象的简单方法是什么?
答案 0 :(得分:1)
扩展TextInput或您在表单中拥有的任何其他输入元素然后在组件创建完成注册更改事件的侦听器,在处理程序中调度冒泡事件,然后在包含表单的文档中使用您的自定义元素,并通过AS3将侦听器添加到您分派的事件的表单中,并在此时停止它的传播。
否则我认为你的第二个变更处理程序解决方案不会太糟糕。如果表单中有很多元素或者它是动态的,你可以编写一个函数来遍历表单的表单项并检查它们的子项,然后你只需编写一个处理每个类类型的开关(你可以使用{ {3}}每个子元素确定它是什么类型,然后如果它是一个TextInput或任何寄存器调用你常用函数的相应事件,只要确保它有一个通用事件作为它的参数,因为所有其他事件将是其子类。)
据我所知,没有简单的方法来侦听来自ArrayCollection或其他包装器ListCollectionView数据结构的底层数据的更改。部分问题是添加的元素不需要集合来实现任何类型的接口以允许监听器被注册。也就是说,数据元素不一定是事件调度程序,将此信息传递给List的唯一另一种方法是,如果数据元素在包含该元素的所有列表上都有句柄,并且它们在列表上标记了某些内容设置任何属性时指示“脏”。这些都可以在语言的限制范围内实现,但不是开箱即用,因为它们的使用可能有限,并且在其他情况下可能会不必要地膨胀ListCollectionView的cpu使用。