起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1075|回复: 4

[结贴] 关于动态生成控件

[复制链接]

3

主题

7

帖子

33

积分

新手上路

Rank: 1

积分
33
QQ
发表于 2015-12-1 22:13:30 | 显示全部楼层 |阅读模式
  1. Model.prototype.button26Click = function(event) {

  2.                 for (var int = 0; int < 30; int++) {
  3.                         var parentNode = this.getElementByXid("div1"); // window为新加button的父元素
  4.                         if (parentNode) {
  5.                                 var flag = {
  6.                                         "xid" : "nbtn" + int,
  7.                                         "label" : "按钮" + int,
  8.                                         "parentNode" : parentNode,
  9.                                         "class" : "btn btn btn-default",
  10.                                         "id":int
  11.                                 };
  12.                                 var button = new Button(flag);
  13.                                 button.on("onClick", function(event) {
  14.                                         alert(flag.label);
  15.                                 });
  16.                         }
  17.                 }
  18.         };
复制代码



为什么生成完以后  这个按钮的事件内的   alert(flag.label);   返回的都是最后一个控件的??
有什么办法能处理一下吗??
发表于 2015-12-2 09:35:50 | 显示全部楼层
本帖最后由 liangyongfei 于 2015-12-2 09:38 编辑

这是js作用域的问题!for循环和if中变量int是同一个,当int发生改变的时候,所有引用int变量的地方,值都会发生改变的!
你需要自定义作用域,比如你的代码可以写成这样:

  • for (var int = 0; int < 30; int++) {
  •                         var parentNode = this.getElementByXid("div1"); // window为新加button的父元素
  •                         if (parentNode) {
  •                                 (
  •                                     var i = int;
  •                                      var flag = {
  •                                         "xid" : "nbtn" + i,
  •                                         "label" : "按钮" + i,
  •                                         "parentNode" : parentNode,
  •                                         "class" : "btn btn btn-default",
  •                                         "id":i
  •                                 };
  •                                 var button = new Button(flag);
  •                                 button.on("onClick", function(event) {
  •                                         alert(flag.label);
  •                                 });
  •                                 )
  •                         }
  •                 }
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

3

主题

7

帖子

33

积分

新手上路

Rank: 1

积分
33
QQ
 楼主| 发表于 2015-12-2 10:47:36 | 显示全部楼层
liangyongfei 发表于 2015-12-2 09:35
这是js作用域的问题!for循环和if中变量int是同一个,当int发生改变的时候,所有引用int变量的地方,值都会 ...

哥们.照你这样加上括号以后       编译不过去呀...
回复 支持 反对

使用道具 举报

发表于 2015-12-2 11:17:41 | 显示全部楼层
小坤1005858885 发表于 2015-12-2 10:47
哥们.照你这样加上括号以后       编译不过去呀...

好吧,刚刚只是个思路,完整的代买是:
  1. define(function(require){
  2.         var $ = require("jquery");
  3.         var justep = require("$UI/system/lib/justep");
  4.         var Button = require("$UI/system/components/justep/button/button");
  5.        
  6.         var Model = function(){
  7.                 this.callParent();
  8.         };
  9.        
  10.         Model.prototype.button26Click = function(event) {
  11.                
  12.                 for (var int = 0; int < 30; int++) {
  13.                         var parentNode = this.getElementByXid("div1"); // window为新加button的父元素
  14.                         (function(){
  15.                                 var i = int;
  16.                                 if (parentNode) {
  17.                                  var flag = {
  18.                                         "xid" : "nbtn" + int,
  19.                                         "label" : "按钮" + int,
  20.                                         "parentNode" : parentNode,
  21.                                         "class" : "btn btn btn-default",
  22.                                         "id":int
  23.                                 };
  24.                                 var button = new Button(flag);
  25.                                 button.on("onClick", function(event) {
  26.                                         alert(flag.label);
  27.                                 });
  28.                               
  29.                               
  30.                         }}());
  31.                 }
  32.         };

  33.         return Model;
  34. });
复制代码

qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

3

主题

7

帖子

33

积分

新手上路

Rank: 1

积分
33
QQ
 楼主| 发表于 2015-12-2 13:28:28 | 显示全部楼层
liangyongfei 发表于 2015-12-2 11:17
好吧,刚刚只是个思路,完整的代买是:

谢啦 哥们.可以结贴了~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-6 05:27 , Processed in 0.140203 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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