1

部分的なページのAJAX更新を活用するASPMVCアプリケーションがあります。画面の1つのパネルでユーザー主導のアクションが発生した場合、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();

機能的には、このソリューションは機能します。

ただし、gotoソリューションとして一時的なJavascriptステートストアーに辞任する前に...質問したいのですが、そのような状況ではより良いパターンやプラクティスが存在しますか?

4

1 に答える 1

0

ツリー オブジェクトで発生する何らかの種類の onload イベントとして保存および実行する必要がある限り、私は同意します。

しかし、これは定期的に発生する操作 (jstree の変更) であり、1 回限りの初期化ではないため、おそらく jstree は自身の内部状態を心配する必要があり、必要に応じて独自に変更リクエストをキューに入れる必要があります。

私がこれを言うのは、複雑な API の複雑な内部状態を持つオブジェクトを避けようとしているからです。methodX が失敗するかどうか、または IllegalStateException をスローするのと同等のことを行うかどうかについて心配する必要はありません。

さらに、コードをより DRY に保ちます。if(!tree.ready()) { queueit() }コードをカプセル化して 1 か所で実行できた場合でも、コードをポイ捨てすることが何度も発生することはありません。

于 2012-06-14T22:12:40.860 に答える