FineUI 官方论坛

标题: 在客户端用js操作Ext组件之经验 [打印本页]

作者: 任文彬    时间: 2013-7-4 10:16
标题: 在客户端用js操作Ext组件之经验
本帖最后由 任文彬 于 2013-7-4 10:20 编辑

群里有人问到在客户端用document.getElementById操作Ext为何无效,在此作答。

1,一个ext组件往往不是单一的html element,而是经过层层包装了的“组件”,所以ext开发中document.getElement极少用到
2,常用的是对组件进行操作,var cmp=Ext.getCmp(组件ID),然后cmp有各种更方便的高级方法和属性供你使用,查原版ExtJs文档即可
3,到这里了还不行,因为在ASP.NET中,服务端设定的控件ID不一定等于客户端的组件ID,为了方便在客户端访问组件,需要有某种方法告诉客户端,服务端控件的ID与客户端组件ID的对应关系。我编写了以下方法以实现此目的:
  1. public static void RegisterIdMap(params Control[] controls)
  2.     {
  3.         var sb = new StringBuilder();
  4.         sb.Append(
  5.             @"
  6.             window.registerIdMap=function(map){
  7.                 if(typeof(window.idMap)=='undefined') window.idMap={};
  8.                 for(var map_key in map){
  9.                     window.idMap[map_key]=map[map_key];
  10.                 }
  11.             };
  12.             window.registerIdMap({ ");
  13.         foreach (Control c in controls)
  14.         {
  15.             sb.Append(c.ID).Append(": "").Append(c.ClientID).Append("",");
  16.         }
  17.         if (controls.Length > 0)
  18.             sb.Remove(sb.Length - 1, 1);
  19.         sb.Append("});\n");
  20.         X.PageContext.RegisterStartupScript(sb.ToString());
  21.     }
复制代码
例如,假设有一个服务端Button,ID为Button1,对应的ASP.NET生成的客户端Button的ID为”ctrl01_Button1"。使用时在服务端调用过RegisterIdMap(Button1)之后,在客户端就会为顶层window对象添加一个idMap属性,其内容为:{Button1: "ctrl01_Button1" }。
然后就可以用 var btn=Ext.getCmp(idMap.Button1) 得到一个对应的js版的Ext.Button对象,然后用 btn.setText("新文本")就可以在客户端更改Button的文字为“新文本”。(Button.setText() 是js版里的方法)



作者: 隨風往事    时间: 2013-7-8 08:54
学习了!
作者: F壹    时间: 2013-7-16 15:37
好,通用性太强了,我项目现在用的是.net2.0,在服务端设定id,客户端会生成相同id和name,虽然我后来意识到问题,但是已经大量应用,就没有管这个问题,有幸看到此帖,太好了。以后就把这个当做通用的思路应用。
作者: zhbog    时间: 2014-1-4 02:01
没看明白如何使用
作者: erp8@live.cn    时间: 2014-1-5 16:31
谢谢楼主,
想问一下,如果要改客户端GRID表中数据可否指导下?
或者做个示例为谢!




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4