2017-07-18 4 views
0

私はajax呼び出しからJSONデータが返される問題を抱えていますが、データをlazyLoadコールバックのdata.resultと同じに設定すると、データツリーに挿入されていません。ツリーの初期集団にノードがlazyLoadコールバックのデータで展開されない

var values = []; 
    //This call returns a var 'value' which contains the data I want to display. 
    CallToGetData(databaseTree).done(function (value) { 
    values = value; 
    var treeStruc = []; 
    //Grab only the necessary info needed and push each objective into an array. 
    for (var j = 0; j < values.length; j++) { 
     var obj = { title: values[j].Path, key: values[j].Id, lazy: true }; //folder: true, children: [] 
     treeStruc.push(obj); 
    } 
    $(function() { 
     $("#tree").fancytree({ 
      checkbox: true, 
      selectMode: 3, 
      source: treeStruc, //Set the array above to the source. 
      lazyLoad: function (event, data) { 
        data.result = []; 
        //This call returns a var 'value' which contains the data I want to display. 
        CallToGetData(databaseTree, data.node.title).done(function (value) { 
         var lazyNodeValues = []; 
         for (var l = 0; l < value.length; l++) { 
          var obj = { title: value[l].Path, key: value[l].Id, lazy: true }; //folder: true 
          lazyNodeValues.push(obj); 
         } 
         //Currently lazyNodeValues contains to objects that I want to display. 
         data.result = lazyNodeValues;//THIS ASSIGNMENT IS WHAT ISN'T WORKING. 
        }); 
      }, 
      activate: function (event, data) { 
      $("#statusLine").text("Active node: " + data.node); 
      } 
     }); 
    });//End of $function  
});//End of CallToGetData 

、VAR「treeStruc」はこの形式を持つオブジェクトの配列が含まれています

タイトル:「私は設定値」、キー:「私同上set '、lazy:trueです。

これは完全にツリーを埋めます。遅延ロードをクリックすると、子ノードを埋めるためにさらにJSONデータを取得するための別の呼び出しが行われます。それらはまったく同じ構造を持ちますが、行をクリックすると、選択した行の下に何も表示されません。私が紛失しているものがありますか?どんな助けも素晴らしいだろう!

答えて

0

私はこれを見つけました。遅延オブジェクトを作成し、data.resultを約束に設定し、子にネストするデータを取得し、子に配置するデータを解決します。

var dfd = new $.Deferred(); 
data.result = dfd.promise(); 

CallToGetData(data.node.title).done(function (value) { 
     var lazyNodeValues = []; 

     for (var l = 0; l < value.length; l++) { 
     var obj = { title: value[l].Path, key: value[l].Id, lazy: true }; 
     lazyNodeValues.push(obj); 
     } 
     dfd.resolve(lazyNodeValues); 
}); 
関連する問題