0

colModelのステータスフィールドの値を動的に変更する方法はありますか?次のようなフィールドを持つcolモデルがあるとします。

... field ... name: "state",type: "select",
editoptions: {value: "0:state0;1:state1;2:state2;3:state3;4:state4"}

したがって、この値を使用して州の選択フィールドを取得します。しかし、どの選択フィールドが可能であるかを動的に決定する必要があります。現在の行の状態がstate0の場合、state0とstate1のみが表示されます。状態がstate1の場合、表示はstate0、state1、state2のようになり、状態4まではstae3とstate4のみが表示されます。

フォーマッターでこれを解決することはできますか、それともそのようなことを行う他の方法はありますか?

さらに難しくするために、一般的に表示される状態は、私のアプリケーションでログインしているユーザーに依存しているとしましょう。ある意味で、ユーザーはstate0、state2、state4しか見ることができません。これはさらに複雑になる可能性があり、state3とstate4の間の遷移が現在のユーザーに許可されないためです。

それにもかかわらず、状態自体も動的にあります。アプリケーションでオブジェクトのJavaScriptを動的に生成すると便利ですか?これは一般的な状態クラスを表し、このオブジェクトを使用してフォーマッターで必要な出力を生成しますか?したがって、このオブジェクト内のロジック、出力の生成方法、さらにユーザーが表示できる状態のみを取得する方法をカプセル化できます。

1つの石で2羽の鳥を殺すように私を連れて行くべきです。

読み直した後、私が何をしたいのかが明確になっていることを願っています。そうでない場合は、教えてください。詳細を説明します。

具体的な問題の解決策、thx to oleg:

    editoptions : {

    value : function(){
        //a function can be called here:
        currentRow=$("#order_items").getGridParam('selrow');
        currentState=$("#order_items").getCell(currentRow,"state");
                    nastyGeneratedThings=function(){
                                     ... do some nasty things with currentState
                                     ... and generate what you want
                                     }
                    return nastyGeneratedThings
    }

関数が一度だけ呼び出されたため、問題が発生しました。したがって、NavgridでrecreateFormオプションを設定する必要があります。

navGrid("#pager", {
            edit : true,
            add : true,
            del : true
        }, {
            height : 500,
            width : 500,
            // recreate the form every time when edit button is clicked.
            // Default is false.
            recreateForm : true
        }
        });

その後、[編集]をクリックするたびに関数が起動します。これが誰かに何らかの形で役立つことを願っています。

4

1 に答える 1

1

valueプロパティはeditoptions、文字列だけでなく関数にすることもできます。この関数は、"0:state0;1:state1;2:state2;3:state3;4:state4" のような文字列または のようなオブジェクトを返すことができます{"0":"state0", "1":"state1", "2":"state2", "3":"state3", "4":"state4"}。ちなみに、最後の形式にはいくつかの利点があります。たとえば、「:」、「;」を使用できます。値の内側。

この関数にはパラメーターはありませんが、coll のようなgetGridParam('selrow')メソッドと「状態」列の現在の値をgetCell(rowid,iCol)使用して、現在選択されている行を取得できます。getCell(rowid,"state")

詳細については、http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editoptions のvalueプロパティの説明を参照してください)。おそらくこれで問題を解決できますか?

于 2010-08-05T23:02:00.450 に答える