2011-06-12 54 views
0

我有一个Actionscript类,我们将打电话给Person来让示例变得简单。我想要有一个DataGrid填充Person对象,其中有列显示名称,生日等东西。所有这些都很好,很简单,但我还想添加一个复选框列以选择DataGrid中的某些人。示例用例如下:Flex CheckBox ItemRenderer不绑定到对象?

  1. 显示所有人。
  2. 用户选中每个人旁边的框,表示他们希望对这些选择采取某些操作。
  3. 当用户单击按钮时,会对用户选择采取某些操作。

这似乎是常见的解决方案是让每个Person对象上Selected财产,但这并不是真的对我来说是很好的选择。 Person对象在整个应用程序中使用,并且看起来非常不清楚Selected属性,这实际上不是Person类的问题。

我喜欢像Person这样的硬类的类型安全性,但我不知道如何解决这个看似简单的问题,所以我可以遍历这些对象并确定该人是否被选中。有关如何去做这件事的任何提示?提前致谢。

回答

0

我想你已经有了答案:

这似乎是常见的解决方案,以 这是为了让在 每个Person对象为选定的属性,但不是 真的一个很好的选择我。 Person对象在整个 应用程序中使用,并且看起来非常不清洁 有一个Selected属性,其中 真的不是Person 类的问题。

你的“Person对象”的目的是为一个实体(Person)保存状态。在这种情况下,'selected'是一个完全有效的值,因为它涉及到与你的应用相关的那个人的'状态'。

我可以想办法做到这一点;但它们都增加了我觉得在这种情况下不必要的复杂性。

+0

我不同意。我认为'Selected'更像是一个UI关注点,而不是一个'Person'对象的状态(至少我需要如何使用它)。如果我需要一个屏幕来显示两个DataGrid,每个DataGrid都填充了相同的人员列表,但是由于不同的原因选择?一个网格的“Selected”与另一个网格不一样。 – Ocelot20 2011-06-12 01:54:50

+0

“selected”是对象的UI状态的一部分,我仍然认为将该值存储为实际的“UI-Persistent”对象的一部分是完全可以接受的。如果我有多个网格使用相同的数据用于不同的目的,我会使用多个属性。 grid1Selected和grid2Selected。这种方法对我来说似乎很简单。我想你可以在某种方法中使用Object Mediator来维护这些值;但对我来说似乎过度。 – JeffryHouser 2011-06-12 02:30:57

+0

这是一个分离问题的问题。对象本身并不需要知道它是否被选中,只有UI才会被选中。鉴于此业务对象在很多地方都有使用,如果使用它的每个UI组件都声明它在业务逻辑域中拥有自己的属性,它将非常快速地变得非常不便。这是一个滑坡,导致像“Person.Width”这样的事物。当然这很容易做到,但我希望能有一个干净的替代方案,遵循良好的编码习惯。 – Ocelot20 2011-06-12 02:43:03