我们有一个利用部分页面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解决方案辞职之前...我想问一个问题 - 这种情况是否存在更好的模式或实践?
答案 0 :(得分:0)
我同意它应该作为树对象上发生的某种类型的onload事件存储和执行。
但是,由于这是经常发生的操作(改变jstree)而不是一次初始化的事情,也许jstree应该是担心它自己的内部状态的那个,并且必要时应该自己排队变异请求。
我这样说只是因为我试图避免由于复杂的内部状态导致复杂api的对象。我不想担心methodX是否会失败,或者在设计出这种可能性时是否合理抛出IllegalStateException。
另外,你保持代码更干。你可能不会多次出现if(!tree.ready()) { queueit() }
乱丢你的代码,当它可以在一个地方完成时封装它。