2017-05-28 3 views
0

私はTreeStoreのいくつかのアイテムを計算するボタンを持っています。私がそれをクリックすると私は木をリロードしたい。しかし、今、アイテムをクリックして計算すると、選択したアイテムの下に同じような別のツリーを作成し、新しいアイテムをリロードします。どのようにしてこの問題の適切なコードを書くことができますか?ボタンをクリックしたときにextjsのツリーを再描画する方法

これは、計算ボタンをクリックすると、私の関数である。

'g-infitmformula #calculateFormula': { 
      click: function (sender) { 
       var selectedinfoIdList = Ext.ComponentQuery.query("g-infitmformula")[0].getSelectionModel().getSelection(); 
       Ext.each(selectedinfoIdList, function (item) { 
        informationItemIds.push(item.data.id); 
       }); 
       if (selectedinfoIdList.length > 0) { 
        Dufo.Func.loadMask(Ext.getBody(), true); 
        Ext.Ajax.request({ 
         url: '/sis/rest/infoit/calculateFormula', 
         jsonData: { 
          infoItemStrings: informationItemIds 
         }, 
         success: function (result, request) { 
          var data = Ext.JSON.decode(result.responseText).ReturnValue; 
          Ext.Msg.alert('', data.description); 
          Dufo.Func.loadMask(Ext.getBody(), false); 
          if (data.successful === true) { 
           // Ext.ComponentQuery.query('g-infitmformula')[0].store.reload(); 
           Ext.ComponentQuery.query("g-infitmformula")[0].store.reload({ 
            params: { 
             id: "root", 
             dtstart: dtstartVar, 
             dtend: dtendVar, 
             infitmcat: infitmcatVar 
            } 
           }); 
           informationItemIds = []; 
          } 
          else { 
           informationItemIds = []; 
           Ext.Msg.alert('', data.description); 
          } 
         }, 
         failure: function (result, request) { 
          Dufo.Func.loadMask(Ext.getBody(), false); 
          informationItemIds = []; 
          Ext.Msg.alert('', Ext.JSON.decode(result.responseText).ReturnValue.description || Dufo.ux.fa.jsonFormatFail); 
         } 
        }); 
       } else { 
        Ext.Msg.alert('', Dufo.ux.fa.selectSomething); 
       } 
      } 
     } 

は、これは私がリロードしたい私の店クラスです:

Ext.define('Dufo.store.InformationItemsFormula', { 
    extend: 'Ext.data.TreeStore', 
    storeId: 'infitmformula', 
    model: 'Dufo.model.InformationItemsFormula', 
    autoLoad: false, 
    nodeParam: 'id', 
    clearOnLoad: true, 
    listeners: { 
    append: function (parent, child, index, eOpts) { 
     var me = this; 
     if (!child.isRoot()) { 
      child.set('leaf', child.get('isLeaf')); 
      if (child.data.children) { 
       var root = me.tree.treeStore.getRootNode(); 
       child.data.children.forEach(function (test) { 
        var n = root.createNode(test); 
        child.appendChild(n); 
       }); 
      } 
     } 
    } 
    }, 

    proxy: { 
    type: 'ajax', 
    url: '/sis/rest/infitmval/gtinffmlitmval', 
    actionMethods: { 
     read: 'POST', create: 'POST' 
    }, 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json; charset=utf-8' 
    }, 
    jsonData: true, 
    reader: { 
     type: 'json', 
     root: function (o) { 


      if (o.ReturnValue) { 
       if(o.ReturnValue.detail.length) { 
        Ext.ComponentQuery.query("#calculateFormula")[0].setDisabled(false); 
       }else { 
        Ext.ComponentQuery.query("#calculateFormula")[0].setDisabled(true); 
       } 

       for (var i=0; i < o.ReturnValue.detail.length; i++) { 
        o.ReturnValue.detail[i].id = o.ReturnValue.detail[i].id + '-' +Dufo.store.TreeStoreIDGenerator.generateId(); 
       } 

       return o.ReturnValue.detail; 
      } 
     } 
    } 
    } 

}); 

答えて

0

あなたが明示的に作成されているため、コードの下にあなたが問題を作成しています同じノード。これらのノードはExtjs自身によって作成されます。

listeners: { 
    append: function (parent, child, index, eOpts) { 
     var me = this; 
     if (!child.isRoot()) { 
      child.set('leaf', child.get('isLeaf')); 
      if (child.data.children) { 
       var root = me.tree.treeStore.getRootNode(); 
       child.data.children.forEach(function (test) { 
        var n = root.createNode(test); 
        child.appendChild(n); 
       }); 
      } 
     } 
    } 

appendリスナーは、いくつかの操作を全く新しく作成されたノードを実行しないように使用することができますので、このコードを削除します。これは基本的にCalled from a node's appendChild methodからの呼び出しです。

+0

削除しましたが動作しません。選択したアイテムの下にもう1つのツリーが作成されます。 –

+0

可能であれば、フィドルを提供してください。 –

関連する問題