我使用以下代碼ExtJs的從相同的觀點
var reader = Ext.create('Ext.view.ReaderWindow', {});
reader.show();
裏面ReaderWindow視圖上點擊一個標籤元件開口的視圖,我打開同一視圖中打開的圖(使用上面的代碼)但是內容不同。
一旦我關閉了我第二次打開的ReaderWindow。我無法看到我首先打開的ReaderWindow。
我的問題是如何使用相同的觀點兩次。換句話說,如何從視圖本身開啓相同的視圖。
Ext.define('Ext.view.ReaderWindow', {
extend: 'Ext.window.Window',
alias: 'widget.reader',
id: 0,
file_path: '',
file_title: '',
file_type: '',
id: 'reader',
itemId: 'reader',
maxHeight: 800,
maxWidth: 900,
minHeight: 300,
minWidth: 500,
layout: {
type: 'anchor'
},
title: 'File Reader',
modal: true,
initComponent: function() {
var me = this;
Ext.applyIf(me, {
items: [
{
xtype: 'form',
anchor: '100% 100%',
id: 'reader_form',
itemId: 'reader_form',
maxHeight: 800,
maxWidth: 900,
minHeight: 300,
minWidth: 500,
autoScroll: true,
bodyPadding: 10,
items: [
{
xtype: 'displayfield',
anchor: '100%',
id: 'file_contents',
itemId: 'file_contents',
maxWidth: 900,
minWidth: 50,
hideLabel: true,
name: 'file_contents'
}
]
}
],
dockedItems: [
{
xtype: 'toolbar',
anchor: '100% 5%',
dock: 'bottom',
id: 'reader_toolbar',
itemId: 'reader_toolbar',
items: [
{
xtype: 'tbfill'
},
{
xtype: 'button',
handler: function(button, event) {
me.destroy();
},
id: 'close_btn',
itemId: 'close_btn',
text: 'Close',
tooltip: 'Close the file reader window.'
}
]
}
],
listeners: {
beforerender: {
fn: me.reader_windowBeforeRender,
scope: me
}
}
});
me.callParent(arguments);
},
reader_windowBeforeRender: function(component, eOpts) {
this.setTitle(this.file_title + ' for ID ' + this.id);
this.setFormTitle(this.file_path);
Ext.model.FileReaderModel.load(this.id, {
params: {
'file': this.file_path,
'file_type': this.file_type
},
success: function(file_reader) {
var contents_field = Ext.ComponentQuery.query('[name=file_contents]')[0];
var contents = file_reader.get('file_contents');
var pattern = /(\/.*?\.\S*)/gi;
contents = contents.replace(pattern, "<a href='#' class='samplefile'>$1</a>");
contents_field.setValue('<pre>' + contents + '</pre>');
Ext.select('.samplefile').on('click', function() {
var sample_file_path = this.innerHTML;
var Id = this.id;
var reader = Ext.create('Ext.view.ReaderWindow', {
id: Id,
file_path: sample_file_path,
file_title: 'Sample File',
file_type: 'output'
});
reader.show();
});
},
failure: function(file_reader, response) {
}
});
},
setFormTitle: function(file_path) {
var form_panel = Ext.ComponentQuery.query('#reader_form');
form_panel[0].setTitle('File is: ' + file_path);
}
});
如果你從'Ext.view.ReaderWindow'發佈代碼會很有幫助,因爲你的類聲明中可能有一些「靜態」,當第二個實例關閉時它會被銷燬。換句話說,這兩個實例實際上共享了一個你不希望他們共享的對象。 –
你的'Ext.view.ReaderWindow'聽起來像是'Ext.window.Window'的擴展,而不是'Ext.view.View',所以我猜你可能需要'closeAction:'hide'',但這是有點跳躍,看到你正在創造一個新的實例...但像喬霍洛威說,沒有更多的代碼很難說。 – incutonez
甚至在關閉第二個窗口之前。背景中的第一個窗口似乎只有佈局形狀,並且內部沒有內容。 – sooners