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的对应关系。我编写了以下方法以实现此目的:
public static void RegisterIdMap(params Control[] controls)
{
var sb = new StringBuilder();
sb.Append(
@"
window.registerIdMap=function(map){
if(typeof(window.idMap)=='undefined') window.idMap={};
for(var map_key in map){
window.idMap[map_key]=map[map_key];
}
};
window.registerIdMap({ ");
foreach (Control c in controls)
{
sb.Append(c.ID).Append(": "").Append(c.ClientID).Append("",");
}
if (controls.Length > 0)
sb.Remove(sb.Length - 1, 1);
sb.Append("});\n");
X.PageContext.RegisterStartupScript(sb.ToString());
}
复制代码
例如,假设有一个服务端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