在时间上断开的Javascript事件之间保留状态的最佳实践?

时间:2012-06-14 21:26:36

标签: javascript asp.net asp.net-mvc javascript-events temporal

我们有一个利用部分页面AJAX更新的ASP MVC应用程序。 当我们的屏幕的一个面板上发生用户驱动的操作时,我们需要确保我们的jsTree(在单独的面板中)更新。

然而,试图在...内行动 成功: AJAX调用的一部分不起作用 - 这种情况发生得太早,并且jsTree尚未准备好接受这些命令。稍后执行相同的命令就可以了。

我们已经解决了以下问题: - 在AJAX成功之后,将所需的回调方法存储在新的Javascript类中:

var EPCStateMembers =
{
    _callbackMethod: "",

    StoreCallback: function (callbackMethod)
    {
        EPCStateMembers._callbackMethod = callbackMethod;
    },

    UseCallback: function ()
    {
        if (EPCStateMembers._callbackMethod != "")
            EPCStateMembers._callbackMethod();

        EPCStateMembers._callbackMethod = "";
    }
}

在AJAX成功中,我们调用EPCStateMembers.StoreCallback()

然后,一旦jsTree准备好(由它自己的事件指示,reselect.jstree) - 我们调用     EPCStateMembers.UseCallback();

从功能上讲,此解决方案有效。

然而,在我们将临时Javascript状态存储器作为我们的goto解决方案辞职之前...我想问一个问题 - 这种情况是否存在更好的模式或实践?

1 个答案:

答案 0 :(得分:0)

我同意它应该作为树对象上发生的某种类型的onload事件存储和执行。

但是,由于这是经常发生的操作(改变jstree)而不是一次初始化的事情,也许jstree应该是担心它自己的内部状态的那个,并且必要时应该自己排队变异请求。

我这样说只是因为我试图避免由于复杂的内部状态导致复杂api的对象。我不想担心methodX是否会失败,或者在设计出这种可能性时是否合理抛出IllegalStateException。

另外,你保持代码更干。你可能不会多次出现if(!tree.ready()) { queueit() }乱丢你的代码,当它可以在一个地方完成时封装它。