0

ディレクトリを にある に遅延ロードする必要がありdijit.Treeますdijit.form.Dialog。ルート ディレクトリを取得し、ルート ノード 'Computer' を使用してツリーに配置できますが、遅延読み込みを機能させる方法がわかりません。

ノードをクリックすると、選択したノードの子を取得するために ajax 呼び出しを行う関数が呼び出されます。それらをフェッチして、JSON としてレンダリングして gsp に戻すことができます (整形式だと思います)。しかし、それらをストアに入れようとすると失敗します。仕事に行けないstore.newItem()。とにかく、これが正しくて最も簡単な方法であるかどうかはわかりません。検索して試して失敗しましたが、残念ながら行き詰まりました。

私が使う:

  • グレイルズ 1.3.9
  • 道場ツールキット 1.6

dataStore を gsp に取得する方法:

    File [] roots = File.listRoots()        
    def item = []

    roots.each{
        item << [
            name         : it.getAbsolutePath(),
            path         : it.getAbsolutePath(),
            children     : []
        ]
    }
    def store = [
        identifier: 'path',
        label: 'name',
        items: item
    ]

    def retVal = [store: store]

    render retVal as JSON

ストア、モデル、ツリーの定義:

    function prepare(dataStore) {                           
        var store = new dojo.data.ItemFileWriteStore({
               data: dataStore
        });
        var treeModel = new dijit.tree.ForestStoreModel({
               store: store,
               rootId : "root",
               rootLabel : "Computer",
               childrenAttrs: ["children"]
       });
       var treeControl = new dijit.Tree({
               id: 'directoryTree',
               model: treeModel,
               autoExpand: false,
               onClick: loadDirectories
               },
               "treeOne");
       }

ここで、ストアを編集しようとするコード、データはリストです:

    data = [
        [name: 'info', path: 'C:\temp\info', children: []]
        [name: 'grmpf', path: 'C:\temp\grmpf', children: []]
        ...
    ]

    for(i=0; i < data.length; i++){
      store.newItem({name: data[i].name, path: data[i].path, children: data[i].children}, {parent: parent.path[0], attribute: 'children'}); 
      store.save(); 
    }   

この方法で試してみて、一度アイテムを削除し、アイテムを編集してストアに入れ直しました。しかし、何も機能しませんでした..

誰かが私に何か洞察を与えることができれば、私はそれを感謝します!

4

1 に答える 1

0

幸いなことに、私は非常に奇妙な問題を見つけました...

さて、私は試しました:

    store.newItem(jsObj, parent);
    store.save();

ソリューション:

    model.newItem(jsObj, parent);

保存するアイテムを追加する代わりに、モデルに入れて機能します。理由はよくわかりません。多分誰かが私にそれを説明することができます。ありがとう

于 2012-09-17T13:31:30.067 に答える