浏览 2355 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-06-28
求助:奇怪的Ext.get('center-iframe').dom.src = ""+node.id;
我使用以下代码产生一个左边是tree 右边是iframe 的界面,但是在使用 tree.on('click', function(node){
if(node.isLeaf()) {
Ext.get('center-iframe').dom.src = ""+node.id;
};
});
切换iframe 中显示的内容时却很奇怪,因为除了第一次外,其他的时候虽然能显示切换的页面内容(其实页面并没有刷新),但实际上并没有向容器发出页面请求(我使用tomcat,在filter中只有第一次选择时能截取到请求),就好像是显示一个本地的缓存内容一样。 请问为什么??????谢谢!!! 以下是页面详细的javascript:
function getIframeDocument(el) {
var oIframe = Ext.get('center-iframe').dom;
var oDoc = oIframe.contentWindow || oIframe.contentDocument;
if(oDoc.document) {
oDoc = oDoc.document;
}
return oDoc;
}
Simple = function() {
var northPanel, southPanel, eastPanel, westPanel, centerPanel;
return {
init : function() {
var mainLayout = new Ext.BorderLayout(document.body, {
north: {
split: false, initialSize: 30
},
west: {
split: true, initialSize: 200, titlebar: true, collapsible: true
},
center: { titlebar: true}
});
mainLayout.beginUpdate();
mainLayout.add('north', northPanel = new Ext.ContentPanel('north-div', {
fitToFrame: true, closable: false
}));
mainLayout.add('west', westPanel = new Ext.ContentPanel('west-div', {
fitToFrame: true, closable: false, title:'导航栏'
}));
mainLayout.add('center', centerPanel = new Ext.ContentPanel('center-div', {
fitToFrame: true, autoScroll: true, resizeEl: 'center-iframe', title:'操作界面'
}));
mainLayout.endUpdate();
northPanel.setContent("<div style=\"padding-left:5px;padding-top:5px;font-size: 18px;font-weight: bold;color: #FFFFFF;\">测 试 系 统</div> ");
Ext.get('center-iframe').dom.src="welcome.html";
}
};
}();
Ext.EventManager.onDocumentReady(Simple.init, Simple, true);
Ext.onReady(function(){
// shorthand
var Tree = Ext.tree;
var tree = new Tree.TreePanel('west-div', {
animate:true,
loader: new Tree.TreeLoader({dataUrl:'SystemFunction.do?method=MenuTree'}),
enableDD:false,
containerScroll: true
});
// set the root node
var root = new Tree.AsyncTreeNode({
text: '系统菜单',
draggable:false,
id:'RootTree'
});
tree.setRootNode(root);
tree.on('beforeload', function(node){
//alert(node.id);
tree.loader.dataUrl = 'SystemFunction.do?method=MenuTree&menuId='+node.id;
});
tree.on('click', function(node){
if(node.isLeaf()) {
Ext.get('center-iframe').dom.src = ""+node.id;
};
});
// render the tree
tree.render();
root.expand();
});
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-06-28
你的click事件中node.id值对不对?这里最好把url存到用node的attributes属性里
|
|
| 返回顶楼 | |
|
最后更新时间:2007-06-28
jianyu 写道 你的click事件中node.id值对不对?这里最好把url存到用node的attributes属性里
click事件中node.id值肯定是对的.因为第一次是成功的. 只是从第二次开始就不行了,根本没有向容器发出请求,也就是能显示出对应的内容,但是实际没有刷新. |
|
| 返回顶楼 | |
|
最后更新时间:2007-06-29
莫非再讲页面缓存
|
|
| 返回顶楼 | |
|
最后更新时间:2007-06-29
我也遇到过类似的情况。下面这样一段代码:
ds = new Ext.data.Store( proxy: new Ext.data.HttpProxy({ method: 'get', url: 'company.do?type=initdata' }), ..... 只有第一次执行 ds.load(...的时候才会执行。而后对 ds.load(...的调用只会返回缓存的内容,而不会触发后台的代码。 去掉 method: 'get' 以后,一切都正常了。 那位达人可以解释下? |
|
| 返回顶楼 | |
|
最后更新时间:2007-06-29
确实是被缓存了。
楼主可以试试在后面加上?_=(new Date()).getTime() |
|
| 返回顶楼 | |
|
最后更新时间:2007-06-29
缓存。
浏览器对于已经访问过的url,可能会使用缓存,除非你设置浏览器不用缓存,或服务器发送内容的时候附上一些标识不要缓存的头。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-06-29
Frederick 写道 我也遇到过类似的情况。下面这样一段代码:
ds = new Ext.data.Store( proxy: new Ext.data.HttpProxy({ method: 'get', url: 'company.do?type=initdata' }), ..... 只有第一次执行 ds.load(...的时候才会执行。而后对 ds.load(...的调用只会返回缓存的内容,而不会触发后台的代码。 去掉 method: 'get' 以后,一切都正常了。 那位达人可以解释下? 默认用post。 post是不缓存的。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-06-29
i_love_sc 写道 确实是被缓存了。
楼主可以试试在后面加上?_=(new Date()).getTime() 这种方法可以,只要每次改变为不同的url就可以了。但我更想解决为什么使用缓存的问题! |
|
| 返回顶楼 | |
|
最后更新时间:2007-06-29
使用缓存是正常的行为。开发之前就应该想好你的缓存策略。
加上时间戳只是一个workaround,不是一个好的解决方法。 使用post也是一样,如果本身不需要post的,你用post,就违反了REST架构。 正确的做法是,搞清楚你应用的缓存策略,然后在服务器端设置好。如果就是希望读取一次新的内容,可以在XHR调用前,加入if-modified-since和if-match头。 |
|
| 返回顶楼 | |










