最近初学ext,自己javascript也是个半吊子,所以有很多地方不是太明白,希望哪高手能帮忙解答下,万分感激~~~1,extjs怎么很好的和一般的mvc框架集成?比如我用struts2,页面用freeer。在显示一个列表的时候,难道还要在ftl里面重新把数据一个一个封装成javascript的数组,再传给ext datagrid?有没有什么比较好的办法呢。2,extjs里面所谓的状态到底是什么意思?比如我有个可展开的菜单栏,用户选择了其中一个,当页面跳转或用户刷新后,菜单栏仍然显示在用户上次选择的那个,这个就是所谓的state?那么这个state该如何记录呢?3,每个页面都要通过Ext.onReady来创建一些组件,那么在页面跳转的时候,这些组件会不会缓存呢?比如layout,或者所有页面都公用的panel,不会是每一次页面跳转后都会新建吧。如果是的话,怎样做才比较适合多页面共享相同组件呢。4,div的问题,我发现如果div中有文本信息,然后再利用ext来使用这个div的话,在页面刚刚加载而ext还没有初始化完的时候,div里面的内容会全部以最原始的格式显示出来。虽然是一闪就过,但是还是不太美观。不知道它那个页面加载的效果是怎么做出来的。我看了下example的代码,发现它只是定了一个时间:
var hideMask = function () {
Ext.get('loading').remove();
Ext.fly('loading-mask').fadeOut({
remove:true,
callback : firebugWarning
});
} hideMask.defer(250);
有没有什么更好的办法能做到呢?问题比较多,实在不好意思。所以多给点分,望高手指点一下。
var hideMask = function () {
Ext.get('loading').remove();
Ext.fly('loading-mask').fadeOut({
remove:true,
callback : firebugWarning
});
} hideMask.defer(250);
有没有什么更好的办法能做到呢?问题比较多,实在不好意思。所以多给点分,望高手指点一下。
以struts1为例,也面有一个grid, 那么这个grid的store的proxy的url对应着后台struts的一个action, 比如:http://localhost:8080/MyProj/getAllStudents.do, 那么在后台getAllStudents.do这个url对应的action里面,取数据,然后把数据拼成xml或者json, 然后调用response.getWriter().write() 写到客户端就可以了。从前抬走到后台, 然后数据从后台回到前台全部过程就是这样,和普通的ajax,一样,不存在集成难的问题。 至于你说“在ftl里面重新把数据一个一个封装成javascript的数组, 这个过程是肯定要的, 因为你换了一种数据交换方式。我以前是这样做的, 对每个pojo,都给它一个方法,叫做toJSONString();或者toXMLString();这样的话你在action里面写数据的时候就简单很多了,
2:这个问题我没有做过, 不过我觉得不是难事,后台在session里存放用户选中的一些面板或菜单,或者这些信息放到cookie里面, 然后前台每次onReady函数执行完了以后, 检查一下这些状态,然后调用js恢复到用户刷新以前的状态。
3:理论上讲,肯定不会缓存这些组建, 因为他们是客户端的东西。以刷新就没了。但是你有没有发现,用ext做出来的东西整个就像一个桌面应用程序, 所以整个页面跳转肯定是不推荐的。别忘了ext是一个ajax框架,要用ajax的优点。
4:例子里面的div以及div里面的文字都是不必要的。可以根本不用他们。以examples/grid/array-grid.js为例,最后一行:grid.render('grid-example'); 你完全可以不render到那个div, 直接可以这样:grid.render(document.body);
2,第四个问题,我说的情况是,如果页面上有多个div,而且每个div里面都有一大堆内容,那么再render进去的话,貌似就会出现那种情况。当然也可以让div为空,所有内容都在exj加载后在render进去,但是这样会不会不是那么好看呢实在是感激不尽啊~~~
所以我也不知道有什么插件, 推测可以用iframe, 就是说一些面板的内容要是比较固定,那么就直接和一个页面关联,Ext.onReady(function(){
//我直接拿ext/examples/panel/panels.js作例子
var p = new Ext.Panel({
title: 'My Panel',
collapsible:true,
renderTo: 'some-div',
width:400,
html: '<iframe src="getStudentDetail.do" height=200px width=100%/>'
});
});上面的这个panel将固定和getStudentDetail.do关联,getStudentDetail.do可能对应着一个jsp.....
上面的panel放到整个layout也是可行的, 因为layout的所有面板的构造函数都可以接受一个html参数。第4个问题:那就看实际的需求了,用户觉得妥善就行。
iframe,这个办法不错,每个panel对应一个单独请求,加载一个单独页面。太感谢了~~~~我总结了一下自己的思路,得出一个貌似可行的解决方法。尽量不做页面跳转,即使跳转了也尽量不从服务器端直接返回数据。给页面上所有需要加载数据的地方都单独写action请求,并直接返回json,再用ext一个一个初始化需要加载的对象。不知道这样做的话合不合适。不过如果这样做的话,我感觉还不如用flex+blazeDS或者zk,基本上可以和spring无缝集成,调后台还方便点。哎,我真的怕了js啊.... 囧