FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 5493|回复: 4
打印 上一主题 下一主题

在客户端用js操作Ext组件之经验

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-4 10:16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 任文彬 于 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-16 15:37:33 | 只看该作者
好,通用性太强了,我项目现在用的是.net2.0,在服务端设定id,客户端会生成相同id和name,虽然我后来意识到问题,但是已经大量应用,就没有管这个问题,有幸看到此帖,太好了。以后就把这个当做通用的思路应用。
地板
发表于 2014-1-4 02:01:39 | 只看该作者
没看明白如何使用
5#
发表于 2014-1-5 16:31:20 | 只看该作者
谢谢楼主,
想问一下,如果要改客户端GRID表中数据可否指导下?
或者做个示例为谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-5-13 12:24 , Processed in 0.045971 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表