ExtJS рдореЗрдВ TreePanel рдФрд░ GridPanel рдХреЗ рдмреАрдЪ рдЦреАрдВрдЪреЗрдВ рдФрд░ рдЫреЛрдбрд╝реЗрдВ

рд╕рдорд╕реНрдпрд╛



ExtJS рдмрд╣реБрдд рд╕рд╛рд░реА рдЦреВрдмрд┐рдпреЛрдВ рд╡рд╛рд▓реА рдПрдХ рдмреЗрд╣рддрд░реАрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред Http://dev.sencha.com/deploy/dev/examples/ рдкрд░ рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдбреЗрдореЛ рд╕реНрд░реЛрдд рдЙрдкрд▓рдмреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрдЧрд╛ред

рдореБрдЭреЗ TreePanel рдФрд░ GridPanel рдХреЗ рдмреАрдЪ рдПрдХ рдбрдмрд▓ рдбреНрд░реИрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдПрдХреНрд╕рдЯрдЬреЗрдПрд╕ рдлреЛрд░рдо рдкрд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреЗрд╡рд▓ рдЦрдВрдбрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ - рдХрдЯ рдХреЗ рддрд╣рддред





рдирд┐рд░реНрдгрдп



рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ - рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рднреА рдПрдХреНрд╕рдЯреАрдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, HTML рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

< html >

< head >

< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >

< link rel ="stylesheet" type ="text/css" href ="files/ext-all.css" >

< script type ="text/javascript" src ="files/ext-base.js" ></ script >

<script type= "text/javascript" src= "files/ext-all.js" ></script>

<script type= "text/javascript" src= "files/grid2treedrag.js" > </ script >

< title id ="page-title" > Drag&Drop TreePanel GridPanel ExtJS </ title >

</ head >

< body >

< h3 > Drag&Drop TreePanel GridPanel ExtJS </ h3 >

</ body >

</ html >




* This source code was highlighted with Source Code Highlighter .








рдпрд╣ HTML рдХреЗ рд╕рд╛рде рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕реАрдзреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд "рдЯреЛрдХрд░реА" рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ, рдмрд╛рдИрдВ рдУрд░ (рдЧреНрд░рд┐рдбрдкреИрдирд▓) - рдЙрддреНрдкрд╛рджреЛрдВ, рджрд╛рдИрдВ рдУрд░ (рдЯреНрд░реАрдкрдиреЗрд▓) - рдЙрдирдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░рд╛ рдЧреНрд░рд┐рдб рдмрдирд╛рдПрдВ:

var grid1 = new Ext.grid.GridPanel({

store: new Ext.data.ArrayStore({

fields: [ 'name' , 'unit' , 'price' ],

data: d

}),

columns:[

{

id: 'name_column' ,

header: "" ,

width:40,

sortable: true ,

dataIndex: 'name'

},{

id: 'unit_column' ,

header: ". ." ,

width:20,

sortable: true ,

dataIndex: 'unit'

},

{

id: 'price_column' ,

header: "" ,

width:30,

sortable: true ,

dataIndex: 'price'

}

],

sm : sm,

viewConfig:{

forceFit: true

},

id: 'grid' ,

title: '' ,

region: 'center' ,

layout: 'fit' ,

enableDragDrop: true ,

ddGroup: 'grid2tree'

});




* This source code was highlighted with Source Code Highlighter .








d рдПрдХ рд╕рд░рд▓ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ ArrayStore рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдЧреНрд░рд┐рдб рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рднрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧреНрд░рд┐рдб рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдбреАрдЧреНрд░реИрдбреНрд░реЛрдк рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ ddGroup: 'grid2tree' рд╣рдорд╛рд░реЗ рдбреНрд░реИрдЧ рдЧреНрд░реБрдк рдХрд╛ рдирд╛рдо рд╣реИред рдПрдХ рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм рдПрдХ рдкреЗрдбрд╝ рдмрдирд╛рдПрдБ:



var tree = new Ext.tree.TreePanel({

root:{

text: '' ,

id: 'root' ,

expanded: true ,

children:[{

text: '' ,

children:[{

text: '' ,

leaf: true ,

price: 7000,

unit: ''

}, {

text: '' ,

leaf: true ,

price: 5400,

unit: ''

}, {

text: ' ' ,

children:[{

text: '' ,

leaf: true ,

price: 7000,

unit: ''

}]

}]

},{

text: ' ' ,

children:[{

text: '' ,

leaf: true ,

price: 800,

unit: ''

}]

},{

text: ' ++' ,

leaf: true ,

price: 1200,

unit: ''

}]

},

loader: new Ext.tree.TreeLoader({

preloadChildren: true

}) ,

enableDD: true ,

ddGroup: 'grid2tree' ,

id: 'tree' ,

region: 'east' ,

title: ' ' ,

layout: 'fit' ,

width:300,

split: true ,

collapsible: true ,

autoScroll: true ,

listeners:{

beforenodedrop: function (e) {



if (Ext.isArray(e.data.selections)) {

if (e.target == this .getRootNode()) {

return false ;

}

e.cancel = false ;

e.dropNode = [];

var r;

for ( var i = 0; i < e.data.selections.length; i++) {

r = e.data.selections[i];

e.dropNode.push( this .loader.createNode({

text:r.get( 'name' ),

leaf: true ,

price:r.get( 'price' ),

unit: r.get( 'unit' )

}));

r.store.remove(r);

}

return true ;

}

}

}

});




* This source code was highlighted with Source Code Highlighter .








рдкрдВрдХреНрддрд┐рдпрд╛рдВ

if (e.target == this.getRootNode()) {

return false;

}







рдпрджрд┐ рдЖрдк рдЧреНрд░рд┐рдб рд╕реЗ рд░реВрдЯ рддрддреНрд╡ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЪрдпрдирд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА (рдЖрдк рд╢рд┐рдлреНрдЯ рдФрд░ Ctrl рдХреЗ рд╕рд╛рде рдХрдИ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдЬреЛ рд╣рдореЗрдВ рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреА рдЧрдИ рд╣реИ, рдлрд┐рд░ рд╣рдо рдПрдХ рд▓реВрдк рдореЗрдВ рдЪрдпрдирд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдиреЛрдб рдмрдирд╛рддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рдореВрд▓реНрдп рдФрд░ рдЗрдХрд╛рдИ рдЬреИрд╕реЗ "рдХрд╕реНрдЯрдо" рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдиреЛрдб рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдзреНрд╡рдЬ рдХреЛ рдЬрдХрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕ рдкрд░ рдЖрдЧреЗ рддрд░реНрдХ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣рдорд╛рд░реА "рдЯреЛрдХрд░реА" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд┐рдбрд╝рдХреА рднреА рд╣реИред

var cb = new Ext.FormPanel({

region: 'south' ,

frame: true ,

height: 40,

labelWidth: 200,

labelPad: 0,

items: [

{

xtype: 'checkbox' ,

fieldLabel: ' ' ,

listeners: {

check: function (cb, checked ) {

remove_catalogs = checked ;

}

}

}

]

});



// create and show the window

var win = new Ext.Window({

title: ' ' ,

id: 'tree2divdrag' ,

border: false ,

layout: 'border' ,

width:700,

height:400,

items:[tree, grid1, cb]

});

win.show();




* This source code was highlighted with Source Code Highlighter .








рдЕрдм рд╣рдорд╛рд░реЗ рдЧреНрд░рд┐рдб рдХреЗ рд▓рд┐рдП рддрдерд╛рдХрдерд┐рдд DropTarget рдмрдирд╛рдПрдВ, рдЕрд░реНрдерд╛рдд, рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреАрдВрдЪ рдФрд░ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

var gridTargetEl = grid1.getView().scroller.dom;





рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рддрддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк extJS рдбреЗрдореЛ рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдпрд╛ ext-all-debug.js рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ GridView рдХреЗ рд▓рд┐рдП рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

ts.master = new Ext.Template(

'<div class="x-grid3" hidefocus="true">' ,

'<div class="x-grid3-viewport">' ,

'<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset" style="{ostyle}">{header}</div></div><div class="x-clear"></div></div>' ,

'<div class="x-grid3-scroller"><div class="x-grid3-body" style="{bstyle}">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>' ,

'</div>' ,

'<div class="x-grid3-resize-marker"> </div>' ,

'<div class="x-grid3-resize-proxy"> </div>' ,

'</div>'

);




* This source code was highlighted with Source Code Highlighter .








рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЧреНрд░рд┐рдб рдХрд╛ "рдмреЙрдбреА" рдЗрд╕реЗ рдлреНрд░реЗрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдЕрдВрджрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдЖрд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдХреЛрд░рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреА DOM рд╕рд╛рдордЧреНрд░реА рд▓реЗрддреЗ рд╣реИрдВред



рдЕрдм, рд╣рдорд╛рд░реЗ рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, DropTarget рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рдПрдВ:



var GridDropTarget = new Ext.dd.DropTarget(gridTargetEl, {

ddGroup : 'grid2tree' ,

notifyDrop : function (ddSource, e, data) {

e.cancel = false ;

var node = ddSource.dragData.node;

if ( ( (node.parentNode == null ) || (!node.isLeaf() && !remove_catalogs) ) && !node.hasChildNodes() ) {

e.cancel = true ;

return false ;

}



var r = [];

if (!node.isLeaf()) {

node.cascade( function (n) {

var x = populate(n);

if (x != -1)

r.push(x);

});

}

else

r = populate(node);

grid1.store.add(r);

if ( (node.parentNode != null ) && (remove_catalogs || !node.hasChildNodes()) ) {

node.remove();

}

else {

removeChildNodes(node);

}

return true ;

}

});




* This source code was highlighted with Source Code Highlighter .








рдкрд╣рд▓реЗ, рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд░реВрдЯ рдиреЛрдб рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдм рдХреЛрдИ рд╡рдВрд╢рдЬ рдиреЛрдбреНрд╕ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рд╣рдо рдиреЛрдбреНрд╕ рдХреА рд╕реВрдЪреА рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдиреЛрдб рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди рдиреЛрдб рдХреЛ рдЬреЛрдбрд╝реЗрдВ



var populate = function (node) {

if (!node.isLeaf()) return -1;

var r = new Ext.data.Record();

r.data.name = node.text;

r.data.price = node.attributes.price;

r.data.unit = node.attributes.unit;

return r;

}




* This source code was highlighted with Source Code Highlighter .








рдпрд╣ "рдлрд╝реЛрд▓реНрдбрд░" рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдиреЛрдбреНрд╕ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдЗрд▓рдл () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЧреНрд░рд┐рдб рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдПрдХ рд╕рд░рдгреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (extJS рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛), рдФрд░ рдиреЛрдбреНрд╕ рдХреЛ рдирд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ



var removeChildNodes = function (node) {

node.expand();

for ( var i = node.childNodes.length - 1; i >= 0; i--) {

var currentNode = node.childNodes[i];

if (currentNode.isLeaf() || remove_catalogs)

node.removeChild(currentNode);

else

removeChildNodes(currentNode);

}

}




* This source code was highlighted with Source Code Highlighter .








рдиреЛрдбреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рдЙрдирдХрд╛ рдирд┐рд╖реНрдХрд╛рд╕рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ - рд▓реВрдк рдкрд╛рд╕ рдореЗрдВ рдиреЛрдбреНрд╕, рд▓реЗрдХрд┐рди рд╣рдЯрд╛рдП рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рддреНрдп рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдирд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдиреЗ рднреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╕рд╛рде рд╣реА рд╣рдЯрд╛рдП рдЧрдП рдЪрд┐рд▓реНрдбреНрд░рди, рдПрдХреНрд╕рдкреЗрд▓реНрдбрд┐рд▓, рдЖрджрд┐ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд░реВрдкрд╛рдВрддрд░ рднреАред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА, рд╕реБрдЭрд╛рд╡ рдФрд░ рд╕рд▓рд╛рд╣ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреА рдЬреЛ рдХрд┐ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рд╕рдВрдмрд▓ рд╕реЗ рд╕реБрдиреВрдВрдЧрд╛ред



рдбреЗрдореЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: http://www.linky.ru/~dima4ka/extjs/ (ftp рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рддреНрд░ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж), рдЖрдк рд╡рд╣рд╛рдВ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ



http://dev.sencha.com/deploy/dev/docs/

http://www.sencha.com/forum/



All Articles