1. 程式人生 > >ExtJs TreePanel 動態載入

ExtJs TreePanel 動態載入

<span style="white-space:pre">	</span>今天在做ExtJs 做動態載入的時候,使用刪除第一次可以正確執行,當使用編輯、或新增後,更新的資料一直出不來
這是修改之前的程式碼:
<pre name="code" class="javascript">//新增點組
var addPointGroup = function(groupName)
{

	Ext.Ajax.request(
	{
		url : pg_servlet + '_addFavoriteGroup?name=' + encodeURI(groupName),
		method : 'GET', success : function(response)
		{
			Ext.Msg.alert('提示', '新增點組成功!');
<pre name="code" class="javascript"><span style="white-space:pre">			</span>loadPointGroup();
}, failure : function(response){Ext.Msg.alert('提示', '新增點組失敗!' + response.responseText);}});};//編輯點組var editPointGroup = function(groupName,menuedGroupID){Ext.Ajax.request({url : pg_servlet + '_renameFavoriteGroup?name=' + groupName+ '&groupID=' + menuedGroupID, method : 'GET',success : function(response){Ext.Msg.alert('提示', '修改成功!');
<pre name="code" class="javascript"><span style="white-space:pre">			</span>loadPointGroup();
}, failure : function(response){Ext.Msg.alert('提示', '修改失敗!' + response.responseText);}});};//刪除點組var deletePointGroup = function(groupId){Ext.Ajax.request({url : pg_servlet + '_removeFavoriteGroup?id=' + groupId,method : 'GET', success : function(response){Ext.Msg.alert('提示', '刪除成功!');
<span style="white-space:pre">			</span>loadPointGroup();
}, failure : function(response){Ext.Msg.alert('提示', '刪除失敗!' + response.responseText);}});}

使用這個東西我除錯了半天,結果一直都出不來,後來發現一直都沒調到重新載入的方法,樹節點沒有變化
//獲取點組
var loadPointGroup = function()
{
	var tree = Ext.getCmp("tree");
	var node = tree.getSelectionModel().getSelectedNode();
	if (node == null)
	{
		tree.getRootNode().reload();
	} else
	{
		var path = node.getPath('id');
		tree.getLoader().load(tree.getRootNode(), function(treeNode)
		{
			tree.expandPath(path, 'id', function(bSucess,oLastNode)
			{
				tree.getSelectionModel().select(oLastNode);
			});
		}, this);
	}
};
修改之後的程式碼變成這個樣子:
<pre name="code" class="javascript">//新增點組
var addPointGroup = function(groupName)
{

	Ext.Ajax.request(
	{
		url : pg_servlet + '_addFavoriteGroup?name=' + encodeURI(groupName),
		method : 'GET', success : function(response)
		{
			loadPointGroup();
			Ext.Msg.alert('提示', '新增點組成功!');

		}, failure : function(response)
		{
			Ext.Msg.alert('提示', '新增點組失敗!' + response.responseText);
		}
	});
};

//編輯點組
var editPointGroup = function(groupName,menuedGroupID)
{
	Ext.Ajax.request(
	{
		url : pg_servlet + '_renameFavoriteGroup?name=' + groupName
				+ '&groupID=' + menuedGroupID, method : 'GET',
		success : function(response)
		{
			loadPointGroup();
			Ext.Msg.alert('提示', '修改成功!');

		}, failure : function(response)
		{
			Ext.Msg.alert('提示', '修改失敗!' + response.responseText);
		}
	});
};

//刪除點組
var deletePointGroup = function(groupId)
{
	Ext.Ajax.request(
	{
		url : pg_servlet + '_removeFavoriteGroup?id=' + groupId,
		method : 'GET', success : function(response)
		{
			loadPointGroup();
			Ext.Msg.alert('提示', '刪除成功!');
		}, failure : function(response)
		{
			Ext.Msg.alert('提示', '刪除失敗!' + response.responseText);
		}
	});
}


實際上在功能方面沒有任何變化,只是把<span style="font-family: Arial, Helvetica, sans-serif;">loadPointGroup方法放在alert之前呼叫,這樣能保證,</span><span style="font-family: Arial, Helvetica, sans-serif;">loadPointGroup方法不受alert方法的影響。至於為什麼這樣做,我認為這應該和extJs的非同步操作有關。</span>