这个不太难,主要是学习下根据用户不同选项切换不同显示内容的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
/** * @fileoverview 展示怎样使用 ScriptUI 创建一个动态用户界面 * 使用 ScriptUI 的 groups 组件依次显示或隐藏 * @class 同上 * 使用方法 * 运行脚本,你会看到一个含有下拉列表的对话框,当你改变下拉列表的选项时 * 在下拉列表下的部件也会改变 * 描述 * 创建一个非模态对话框(或浮动面板),包含一个下拉列表和容纳两个组的面板 * 当对话框显示时,根据下拉列表的选项,一个组显示另一个隐藏 * @constructor Constructor */ function SnpCreateDynamicScriptUI() { this.windowRef = null; } /** * 脚本的函数部分,创建一个非模态对话框和它的组件 * 定义列表组件的事件处理函数 * @return 如果脚本运行正常返回 True,否则返回 false * @type 布尔 */ SnpCreateDynamicScriptUI.prototype.run = function() { var res = "palette {\ whichInfo: DropDownList { preferredSize: [100,20], alignment:'left' },\ allGroups: Panel { text:'内容', orientation:'stack',\ info: Group { orientation:'column',\ name: Group { orientation:'row',\ s: StaticText { text:'姓名:' },\ e: EditText { preferredSize:[200,20] }\ }\ },\ workInfo: Group { orientation:'column',\ name: Group { orientation:'row',\ s: StaticText { text:'公司名称:'},\ e: EditText { preferredSize:[200,20] }\ }\ }\ },\ buttons: Group { orientation:'row', alignment:'right',\ okBtn: Button { text:'确定', properties: { name:'ok'} },\ cancelBtn: Button { text:'取消', properties: { name:'cancel' } }\ }\ }"; // 创建一个带有这些组件的对话框 var win = new Window(res); this.windowRef = win; // 定义下拉列表的行为来改变显示内容 // 逻辑上是先将所有项目组的内容都隐藏,然后把选中的项目组内容显示出来 // 至于 item.group,原生是没有这个属性的,是在后面脚本声明的 win.whichInfo.onChange = function() { // 这这段代码中,this 引用的是列表组件对象 // 因为引用 onChange 函数的是 whichInfo if (this.selection != null) { for (var g = 0; g < this.items.length; g++) { // 隐藏全部其他组 this.items[g].group.visible = false; } // 显示这个组 this.selection.group.visible = true; } } // 定义按钮的行为 // close(1/2) 分别对应着确定和取消这两个简单行为 // 因为这里也没有针对 close() 返回的值做具体处理,所以没有实际意义 win.buttons.okBtn.onClick = function() { this.parent.parent.close(1); }; win.buttons.cancelBtn.onClick = function() { this.parent.parent.close(2); }; // 添加列表项目,add() 参数除了 item 还可以是 separator,一个分隔符 // 虽然为两个列表项目添加不同的内容组使用的是一个变量,不过在添加时变量代表的内容是不同的,所以不冲突 var item = win.whichInfo.add('item', "个人信息"); item.group = win.allGroups.info; item = win.whichInfo.add("item", "工作信息"); item.group = win.allGroups.workInfo; // 为下拉列表设置一个初始值 win.whichInfo.selection = win.whichInfo.items[0]; win.center(); win.show(); return true; }; new SnpCreateDynamicScriptUI().run(); |