想象一下用qooxdoo编写的卡拉OK播放器/关键帧动画系统等。 Player对象将具有反映当前位置的属性。该属性将绑定到一些GUI控件,比如滑块,以便用户可以跳转到任意位置。同时,播放时播放机制将逐步更新位置。
问题是,在这两种情况下应该应用不同的逻辑。
1)如果从外部设置“position”属性(例如,用户点击了一个滑块),则会应用一些复杂的逻辑:我们应该重新计算活动的verse / line / syllable /对关键帧(可能使用二进制搜索) )并激活它;
2)如果通过迭代的回放机制更新了属性,则逻辑非常简单:我们应该只检查下一个对象的边界是否已经越过,然后前进到它。
在这两种情况下都应该调用标准逻辑(实例检查和触发更改事件)。我一直在考虑通过直接设置$$ user_position变量来绕过复杂的“apply”方法,或者分析当前的调用堆栈并根据它来采用不同的路径,但这两种方法似乎都是脏黑客。这就是为什么我会感谢任何关于如何在qooxdoo the Right™Way®中实现所述的建议。
答案 0 :(得分:2)
我认为这种情况的一个共同模式不是给财产本身带来太多功能(意思是:它的应用方法)。相反,保持属性相当简单,并仅使用它来记录当前位置。然后设计像'goto'和'next'这样的方法,它们都会更新position属性,尽管使用不同的算法,就像你写的那样。