ExtJSのツールバーについて動的にボタンを追加します(バックグラウンドデータベースから情報を読み取ります)。
5085 ワード
転載:http://www.cnblogs.com/wangsj/archive/2010/05/25/1743338.html
問題の検討:http://home.cnblogs.com/group/topic/39468.html
作者:王善軍
ツールバーにボタンを動的に追加したいですが、どのボタンを追加するかはバックグラウンドデータベースから情報を読み取ります。
バックグラウンドコード
// , JSON
string json = "[{'id': '1','text':' 1'},{'id':'2','text':' 2'},{'id':'4','text':' 3'}]";
json = "{'totalProperty':'3','result':" + json + "}";
Response.Write(json);
ところで、JSはどう書きますか?この問題は長い間悩んでいます。以下のコードを書き始めましたが、成功しませんでした。
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 ToolBar = function() {
Ext.Ajax.request({
url: 'rolegroup.aspx',
params: '',
method: 'POST',
success: function(response, options) {
//alert('success');
var rsp = Ext.util.JSON.decode(response.responseText);
var total = rsp.totalProperty;
//alert(total);
//alert(rsp.result[0].text);
var arrays = new Array(total);
for (var i = 0; i < total; i++) {
//arrays[i] = new Ext.Toolbar.Button({ text: rsp.result[i].text, iconCls: 'icon-home' });
arrays[i] = { text: rsp.result[i].text, iconCls: 'icon-home' };
if (i == (total - 1))
arr += '{text:' + rsp.result[i].text + '}'
else
arr += '{text:' + rsp.result[i].text + '},';
}
arr = '{[' + arr + ']}';
alert(arr);
//alert(arrays.length);
//alert(arrays[1]['text'] + ',' + arrays[1]['iconCls']);
var o = { items: arrays };
//Ext.apply(this, A, o); // ?
Ext.apply(this, o);
},
failure: function() {
Ext.Msg.alert(" ", " , !");
}
});
ToolBar.superclass.constructor.call(this, {
id: 'tool_bar',
cls: 'top-toolbar',
})
};
Ext.extend(ToolBar, Ext.Toolbar);
// toolbar = new ToolBar();
以上のコードで、arraysはバックグラウンドデータの読み取りに成功しましたが、ツールバーには対応するボタンが表示されません。つまりExt.apply(this) o)成功していません
実際には、Ajaxは非同期でバックグラウンドデータを呼び出して、toolbar=new ToolBar()は先に実行しましたが、同時にバックグラウンドデータを読み取るコードを実行していません。ヒステリシスです。その後、Ext.applyを実行します。 絶対成功しません。
コードを以下のように変更します。
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 SetToolButtons = function(tbr) {
Ext.Ajax.request({
url: 'rolegroup.aspx',
params: '',
method: 'POST',
success: function(response, options) {
var rsp = Ext.util.JSON.decode(response.responseText);
var total = rsp.totalProperty;
var arrays = new Array(total);
for (var i = 0; i < total; i++) {
arrays[i] = new Ext.Toolbar.Button({ text: rsp.result[i].text, iconCls: 'icon-home' });
}
tbr.add(arrays);
tbr.addFill();
tbr.addButton(
{
text: ' ',
iconCls: 'icon-desktop',
scope: this
});
tbr.addSeparator();
tbr.addButton([
{
text: ' ',
iconCls: 'icon-user'
},
{
text: ' ',
iconCls: 'icon-exit'
}]);
},
failure: function() {
Ext.Msg.alert(" ", " , !");
}
});
};
Ext.onReady(function() {
Ext.QuickTips.init();
var toolbar = new Ext.Toolbar({
id: 'tool_bar',
cls: 'top-toolbar'
});
SetToolButtons(toolbar);
}
まずツールバーを作成して、ボタンを追加します。一回で追加します。結果実行成功!
私は多くのネット友達の提供する資料を調べて、みんなの考えを結び付けて、やっと以上のコードがあって、ここで心から広大なネット友達に感謝します!
この文章が皆さんの役に立つことを望みます。