1

想象一个用 qooxdoo 编写的卡拉 OK 播放器/关键帧动画系统/等等。Player 对象将具有反映当前位置的属性。该属性将绑定到一些 GUI 控件,例如滑块,以便用户可以跳转到任意位置。同时,播放时播放机制会逐渐更新位置。

问题是,在这两种情况下应该应用不同的逻辑。

1)如果“位置”属性是从外部设置的(例如,用户点击了一个滑块),一些复杂的逻辑适用:我们应该重新计算活动的诗句/行/音节/关键帧对(可能使用二分搜索)并激活它;
2)如果属性已经被播放机制的迭代更新了,逻辑很简单:我们应该只检查下一个对象的边界是否已经越过,然后前进。

在这两种情况下,都应该调用标准逻辑(实例检查和触发更改事件)。我一直在考虑通过直接设置 $$user_position 变量来绕过复杂的“应用”方法,或者分析当前调用堆栈并据此采取不同的路径,但这两种方法似乎都是肮脏的黑客。这就是为什么我会感谢任何关于如何在 qooxdoo the Right™ Way® 中实施上述内容的建议。

4

1 回答 1

2

我认为这种情况的一个常见模式是不要给属性本身增加太多的功能(意思是:它的 apply 方法)。相反,保持该属性相当简单,并仅使用它来记录当前位置。然后设计像'goto'和'next'这样的方法,它们都更新位置属性,尽管使用不同的算法,就像你写的那样。

于 2013-08-08T15:16:17.543 回答