Окно открывается только один раз
Здравствуйте.
Из примеров 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); Может кто знает, что можно придумать? И с чем это вообще связано. Спасибо |
может окно стоит скрывать а не закрывать ?
closable:true, closeAction:'hide', |
пробовал, тогда окно скрывается, но остается в панели задач )) типа сворачивается, а это не выход
|
попробуй сделать так,
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 }); this.FileManagerWin = win; } this.FileManagerWin.show(); } |
Не прокатило.... то же результат =(
|
значит бери фаерфокс+фаербаг,
смотри ошибки, DOM. |
этим и пользуюсь =))
выдает мне: c.getPositionEl().dom is undefined [Break on this error] return target && c.getPosition...parentNode == (target.dom || target); А как и где дальше смотреть - хз... |
Тема все еще актуальна....
Неужели никто не сталкивался с таким? |
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: [ Ext.extend(Ext.app.Module, { id:'FileManager-win', init : function(){ this.launcher = { text: 'Мой компьютер', iconCls:'tabs', handler : this.createWindow, scope: this } } ] }); } win.show(); } }); гдето так будет работь. Т.е. все итемы обьекты надо создавать сразу внутри окна |
Часовой пояс GMT +3, время: 00:56. |