我认为我正在使用AJAX Web应用程序遇到竞争条件。我正在使用JQuery 1.4.4来处理AJAX请求。
我有一个菜单控件/类,用户单击该类可显示用于操作数据的控件。单击菜单可以显示多个控件,这些控件彼此独立地初始化并以不同的速度加载,并以不可预测的顺序可用(我猜AJ中的A ......)。
控件彼此交互,例如,在一个控件中选择一个项目将其添加到另一个控件。通过使用JQuery触发源控件中的事件并绑定到目标控件中的该事件来进行交互。问题似乎是,当您在所有控件完成初始化之前开始与控件交互时,您可能会导致问题。例如,添加项目似乎在源控件中工作,而目标控件仍在加载但加载时它不会显示添加的项目。我认为这是因为添加项目请求在负载仍在发生时触发并完成,然后覆盖任何更改。
控制设计的目的是使它们尽可能彼此独立,并且如果可能的话,不要直接调用彼此的方法和属性。相同的控件在各种上下文中使用,并且不知道同时显示的其他控件。有一个中央类控制显示和隐藏控件 - 菜单。
有人会建议一种方法可以保持控件/类松散耦合但能够管理它们之间的依赖关系并知道什么时候可以进行交互吗?
我的一些想法如下。对这些或进一步的建议的任何想法表示赞赏。
菜单类可以维护某种标志,指示何时初始化所有控件 - 这将基于递增计数,该递增计数在每个控件的成功加载时递增。这是唯一知道当前正在使用的控件的类,但它是以通用的方式完成的,控件将自己传入以显示。
每个控件都会触发加载的事件,并且该上下文中显示的其他控件会绑定到彼此加载的事件。控件需要知道更多关于它们被使用的上下文,以便它们知道它们何时是最后一个要加载的控件,因此页面已准备好与之交互。
实现一旦加载页面就会执行的请求队列。这似乎有点过于同步。
升级到JQuery 1.6.2是可以考虑但未安排的。由于控件的通用/匿名性质,我不确定延迟是否是正确的选项。
感谢您的帮助
答案 0 :(得分:3)
答案 1 :(得分:1)
我会去菜单类选项,其中感兴趣的控件自己注册,并且该类只是指示何时加载所有已注册的控件(递增计数选项可能是正确的)。
你的优势在于它可以使控件保持独立,允许添加其他控件等,这是你似乎想要做的事情的一个重要方面。
我认为已经考虑或完成的另一个想法是仅对文档进行绑定。这意味着只有在加载页面上的所有控件时,绑定才可用。有什么理由认为这不合适或不起作用吗?