Здравствуйте.
Из примеров extjs 3.1.1 взял рабочий стол и решил сделать в нем подобие моего компьютера.
Нашел в нете файловый менеджер, не могу вспомнить где. Немного подправил и прикрутил к рабочему столу. Только проблемка одна возникла - окно моего компьютера открывается только один раз.
В последующие разы выдает ошибку -
c.getPositionEl().dom is undefined
[Break on this error] return target && c.getPosition...parentNode == (target.dom || target);
Как я понял, у меня при закрытии окна убиваются дочерние компоненты, и их необходимо создавать заново. Вот только не пойму как и что мне сделать.
Данный код при нажатии на ярлык рабочего стола создает новое окно и в качестве итема подгружает файловый менеджер:
MyDesktop.FileManager = Ext.extend(Ext.app.Module, {
id:'FileManager-win',
init : function(){
this.launcher = {
text: 'Мой компьютер',
iconCls:'tabs',
handler : this.createWindow,
scope: this
}
},
createWindow : function(){
var desktop = this.app.getDesktop();
var win = desktop.getWindow('FileManager-win');
if(!win){
win = desktop.createWindow({
id: 'FileManager-win',
title:'Мой компьютер',
width:800,
height:500,
iconCls: 'tabs',
shim:false,
animCollapse:false,
border:false,
constrainHeader:true,
layout: 'fit',
items: FileManager
});
}
win.show();
}
});
Собственно, сам файловый менеджер:
Пробовал я, как видно по комментам, создавать и отдельный компонент, но все равно не помогает....
//Ext.ns('Ext.ux');
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';
// Setup a variable for the current directory
var current_directory = '';
var tree = new Ext.tree.TreePanel ({
autoScroll: true,
animate: true,
containerScroll: true,
border: false,
enableDD: true,
ddGroup : 'fileMove',
loader: new Ext.tree.TreeLoader({
dataUrl: '/core/modules/FileManager/tree-data.json.php'
}),
root: new Ext.tree.AsyncTreeNode({
text: 'Файлы',
draggable: false,
id: 'source',
expanded: true
}),
listeners: {
'click': function(node, e) {
current_directory = node.attributes.url;
ds.load({
params: {directory: node.attributes.url},
callback: do_buttons
});
},
'contextmenu': function(node, e) {
node.select();
context_menu.node = node;
context_menu.show(e.getTarget());
},
'beforenodedrop': do_move
}
});
//Add a tree sorter in folder mode
new Ext.tree.TreeSorter(tree, {folderSort: true});
var context_menu = new Ext.menu.Menu({
id: 'context_menu',
items: [{
text: 'Новая папка',
iconCls: 'new_directory_button',
handler: do_new_directory
},{
text: 'Переименовать',
iconCls: 'rename_directory_button',
handler: do_rename_directory
},{
text: 'Права доступа',
iconCls: 'chmod_directory_button',
handler: do_chmod_directory
},{
text: 'Удалить',
iconCls: 'delete_directory_button',
handler: do_delete_directory
}]
});
/* ---- Begin grid --- */
var ds = new Ext.data.GroupingStore({
url: '/core/modules/FileManager/actions.php',
method: 'POST',
autoLoad: true,
sortInfo: {field: 'name', direction: 'ASC'},
reader: new Ext.data.JsonReader({
root: 'data',
totalProperty: 'count'
},[
{name: 'name'},
{name: 'size'},
{name: 'type'},
{name: 'permissions'},
{name: 'ctime', type: 'date', dateFormat: 'timestamp'},
{name: 'mtime', type: 'date', dateFormat: 'timestamp'},
{name: 'owner'},
{name: 'group'},
{name: 'relative_path'},
{name: 'full_path'},
{name: 'web_path'}
])
});
var cm = new Ext.grid.ColumnModel({
defaults: {
sortable: true
},
columns: [
{header: 'Name', dataIndex: 'name'},
{header: 'Size', dataIndex: 'size', renderer: Ext.util.Format.fileSize},
{header: 'Type', dataIndex: 'type'},
{header: 'Permissions', dataIndex: 'permissions'},
{header: 'Created', dataIndex: 'ctime', renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s')},
{header: 'Modified', dataIndex: 'mtime', renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s')},
{header: 'Owner', dataIndex: 'owner'},
{header: 'Group', dataIndex: 'group'},
{header: 'Relative Path', dataIndex: 'relative_path', hidden: true},
{header: 'Full Path', dataIndex: 'full_path', hidden: true},
{header: 'Web Path', dataIndex: 'web_path', hidden: true}
]
});
var grid = new Ext.grid.GridPanel({
anchor: '0 100%',
border: false,
enableDrag: true,
ddGroup : 'fileMove',
view: new Ext.grid.GroupingView({
emptyText: 'This folder contains no files.',
forceFit: true,
showGroupName: false,
enableNoGroups: true
}),
ds: ds,
cm: cm,
listeners: {
'rowClick': function () {
do_buttons();
},
'rowcontextmenu': function(grid, rowIndex, e) {
filecontextMenu.show(e.getTarget());
e.stopEvent();
}
}
});
/* ---- End grid --- */
var filecontextMenu = new Ext.menu.Menu({
id:'filecontextMenu',
items:[
{
id: 'edit_button',
text: 'Редактировать',
tooltip: 'Редактировать файл',
iconCls: 'edit_button',
disabled: true,
handler: do_edit_file
},{
id: 'proper_button',
text: 'Свойства',
tooltip: 'Свойства файла',
iconCls: 'proper_button',
disabled: true,
handler: do_proper
},{
id: 'download_button',
text: 'Скачать',
tooltip: 'Download Selected File',
iconCls: 'download_button',
disabled: true,
handler: do_download
},{
id: 'rename_button',
text: 'Переименовать',
tooltip: 'Rename Selected File',
iconCls: 'rename_button',
disabled: true,
handler: do_rename
},{
id: 'chmod_button',
text: 'Права доступа',
tooltip: 'Chmod Selected File',
iconCls: 'chmod_button',
disabled: true,
handler: do_chmod
},{
id: 'delete_button',
text: 'Удалить',
tooltip: 'Delete Selected File',
iconCls: 'delete_button',
disabled: true,
handler: do_delete
}]
});
//Ext.ux.FileManager = Ext.extend(Ext.Container ,{
var FileManager = new Ext.Container ({
xtype:"container",
//width:800,
//height:500,
//headerAsText:false,
layout:"border",
//initComponent: function(){
items:[
//this.items=[
{
region: 'west',
border: false,
split: true,
collapseMode: 'mini',
width: 200,
items: tree
},{
region: 'center',
layout: 'anchor',
border: false,
tbar: new Ext.ux.StatusBar({
id: 'status-bar',
statusAlign: 'right',
items: [
{
id: 'new_button',
text: 'Создать',
tooltip: 'Create New File',
iconCls: 'new_button',
handler: do_new
},{
id: 'upload_button',
text: 'Загрузить',
tooltip: 'Upload New File',
iconCls: 'upload_button',
handler: do_upload
},'-']
}),
items: grid
}],
//Ext.ux.FileManager.superclass.initComponent.call(this);
//}
});
// Описание функций
// Конец описания функций
//Ext.reg('FileManager', Ext.ux.FileManager);
Может кто знает, что можно придумать? И с чем это вообще связано.
Спасибо