dojo.connect/dojo.hitch范围问题?
我有一个程序员类,它用项目名称和复选框填充ul-当单击复选框时,弹出对话框应该显示程序员id和项目名称。dojo.connect应该为每个li设置onclick,但项目(i)默认为最后一个值(windows)。知道为什么会这样吗dojo.connect/dojo.hitch范围问题?,dojo,Dojo,我有一个程序员类,它用项目名称和复选框填充ul-当单击复选框时,弹出对话框应该显示程序员id和项目名称。dojo.connect应该为每个li设置onclick,但项目(i)默认为最后一个值(windows)。知道为什么会这样吗 ... projects: {"redial", "cms", "android", "windows"}, name: "Chris", id: "2", constructor: function(programmer) { this.name = pro
...
projects: {"redial", "cms", "android", "windows"},
name: "Chris",
id: "2",
constructor: function(programmer) {
this.name = programmer.name;
this.id = programmer.id;
this.projects = programmer.projects;
},
update: function(theid, project) {
alert(theid + ", " + project);
},
postCreate: function() {
this.render();
// add in the name of the programmer
this.programmerName.innerHTML = this.name;
for(var i in this.projects) {
node = document.createElement("li");
this.programmerProjects.appendChild(node);
innerNode = document.createElement("label");
innerNode.setAttribute("for", this.id + "_" + i);
innerNode.innerHTML = i;
node.appendChild(innerNode);
tickNode = document.createElement("input");
tickNode.setAttribute("type", "checkbox");
tickNode.setAttribute("id", this.id + "_" + i);
if(this.projects[i] == 1) {
tickNode.setAttribute("checked", "checked");
}
dojo.connect(tickNode, 'onclick', dojo.hitch(this, function() {
this.update(this.id, i)
}));
node.appendChild(tickNode);
}
},
刚刚发现附加参数可以附加到挂接装置:
dojo.connect(tickNode, 'onclick', dojo.hitch(this, function() {
this.update(this.id, i)
}));
应该是:
dojo.connect(tickNode, 'onclick', dojo.hitch(this, "update", this.id, i));
刚刚发现附加参数可以附加到挂接装置:
dojo.connect(tickNode, 'onclick', dojo.hitch(this, function() {
this.update(this.id, i)
}));
应该是:
dojo.connect(tickNode, 'onclick', dojo.hitch(this, "update", this.id, i));
为什么要调用此.render()?这是您的功能还是小部件库(即已在生命周期中)?为了更好地度量,请确保调用this.inherited(参数);在后期创建中 我的猜测是,tickNode还不在DOM中,因此connect无法工作。在设置连接之前,请尝试附加复选框。最后一个被激发,因为它被引用保留。您可以尝试以下方法:
for(var i = 0; i < this.projects.length; i++) {
var p = this.projects[i];
node = document.createElement("li");
this.programmerProjects.appendChild(node);
innerNode = document.createElement("label");
innerNode.setAttribute("for", this.id + "_" + p);
innerNode.innerHTML = p;
node.appendChild(innerNode);
tickNode = document.createElement("input");
tickNode.setAttribute("type", "checkbox");
tickNode.setAttribute("id", this.id + "_" + p);
if(i == 0) { //first item checked?
tickNode.setAttribute("checked", "checked");
}
node.appendChild(tickNode);
dojo.connect(tickNode, 'onclick', function(e) {
dojo.stopEvent(e);
this.update(this.id, p);
});
}
for(var i=0;i
我也会考虑去看doj.Cube,而不是CaleEngEnter。祝你好运 为什么要调用此.render()?这是您的功能还是小部件库(即已在生命周期中)?为了更好地度量,请确保调用this.inherited(参数);在后期创建中 我的猜测是,tickNode还不在DOM中,因此connect无法工作。在设置连接之前,请尝试附加复选框。最后一个被激发,因为它被引用保留。您可以尝试以下方法:
for(var i = 0; i < this.projects.length; i++) {
var p = this.projects[i];
node = document.createElement("li");
this.programmerProjects.appendChild(node);
innerNode = document.createElement("label");
innerNode.setAttribute("for", this.id + "_" + p);
innerNode.innerHTML = p;
node.appendChild(innerNode);
tickNode = document.createElement("input");
tickNode.setAttribute("type", "checkbox");
tickNode.setAttribute("id", this.id + "_" + p);
if(i == 0) { //first item checked?
tickNode.setAttribute("checked", "checked");
}
node.appendChild(tickNode);
dojo.connect(tickNode, 'onclick', function(e) {
dojo.stopEvent(e);
this.update(this.id, p);
});
}
for(var i=0;i
我也会考虑去看doj.Cube,而不是CaleEngEnter。祝你好运 或者,我认为它更简洁,您可以将上下文作为第三个参数传递到dojo.connect中:
dojo.connect(tickNode, 'onclick', this, function() {
this.update(this.id, i);
});
或者,我认为它更简洁,您可以将上下文作为第三个参数传递到dojo.connect:
dojo.connect(tickNode, 'onclick', this, function() {
this.update(this.id, i);
});
这是草率的,创建了一个不必要的、无法重用的闭包。在这种情况下,使用dojo.hitch是不必要的开销,其成本超过创建闭包的成本。这是草率的,创建了一个不必要的、无法重用的闭包。在这种情况下,使用dojo.hitch是不必要的开销,其成本超过创建闭包的成本关闭。