4

現在、データベースからツリーを取得する SQL Server に 2 つのストアド プロシージャがあります。1 つ
目は、レベル番号を渡すと、特定のレベルのすべてのノードを取得します。
もう 1 つは、Level、Left、Right の値を渡すと、特定のノードの子を取得します。

私は MVC 3 を使用しています。
理想的には、ユーザーがクリックしてノードを展開するたびにデータベースを呼び出すように JSTree をセットアップしたいと考えています。したがって、ツリー全体をサーバー上の Json モデルにロードしてから、通常のように JSTree に渡すのではなく、ユーザーがクリックした特定のノードの子のみを渡したいと思います。これはすべてのノードで発生するため、ツリー全体ではなく、直接のノードの子のみを JSTree に渡す必要があります。

これは可能ですか?もしそうなら、ビュー (特に) と、おそらく Microsoft の MVC 3 フレームワークを使用するコントローラーのサンプルコードをいただければ幸いです。助けていただければ幸いです。

4

1 に答える 1

2

はい、これは可能です。実際、jstree を使用すると非常に簡単です。

やりたいことは、 jstree プラグインのajaxパラメーターを使用することですが、Web サービスがストアド プロシージャを呼び出すことができるように、拡張されたノード ID を送信する関数がまたはパラメーターに渡されるように設定します。選択したノードの子のデータを返します。json_datadataurl

これは、 http: //www.jstree.com/documentation/json_dataの例の 1 つを少し変更したものです。

$("#tree").jstree({ 
  "json_data" : {
     "ajax" : {
       "url" : "/yourwebservice/getnodechildren",
       "data" : function (node) { 
           //this is passed the node being opened
           //or -1 if it's the root node

           var dataToPass = {};

           if (node === -1) {
              //pass parameters to the webservice that will build and return
              //first two tree levels

              dataToPass = { 
                id : 0,
                initialLoad: true
              }; 
           }

           if (node.attr && node.attr("id") {
               dataToPass = {
                 id: node.attr("id"),
                 initialLoad: false
               }
           }

           return dataToPass;

        },
        "success" : function (dataFromWebservice) {
            //depending on how the webservice returns
            //data you may need to do this
            return dataFromWebservice.d;
        }
      }
    },
"plugins" : [ "themes", "json_data" ]
});

このコードをかなりエレガントにすることもできますが、それが要点です。これにより、一度にすべてではなく、必要に応じてチャンクでツリーを構築できます。

パラメータがURLで渡されるようにWebサービスが設定されている場合は、代わりにURLを関数にして、それを使用して、代わりにノードのIDまたは必要な他のパラメータを使用してURLリクエストを作成します.

于 2012-10-30T23:22:59.460 に答える