List<ListViewItem> arrayItems = dataSourceObject.Select(x => new
ListViewItem(x.TextProperty)).ToList();
上面的代码是创建与文本字段中输入的数字相等的按钮数,并为每个按钮分配一个事件,以便当按顺序点击按钮时,按钮值会旋转。我想分配相同的功能每个按钮(例如,旋转(i),其中每个按钮必须具有共同的i值),并且当单击任何按钮时,旋转功能中的i值必须增加。
答案 0 :(得分:0)
如果您的问题是否可以这样做:
x.addEventListener('click',(function(i_local_copy){return function()
{rotate(i_local_copy);};})(i));
...更简单地说,答案是肯定的,Function#bind
(spec | MDN):
x.addEventListener('click', rotate.bind(null, i));
Function#bind
返回一个新函数(&#34; bound&#34;函数),当被调用时,将调用具有给定this
值(第一个参数)的原始函数,后跟任何您赋予bind
的参数,后跟调用绑定函数的任何参数。
Sinc eyou未在this
中使用rotate
,我们为bind
的第一个参数提供的内容并不重要。我们将i
作为第二个参数传递给bind
,以便rotate
在调用绑定函数时将其视为第一个参数。
在评论中,您说过您希望所有按钮共享同一个变量。如果是这样,只需将其声明为与声明rotate
相同的级别。然后rotate
将关闭它。
这是一个更简单的例子来证明这个想法:
// An inline-invoked scoping function to avoid creating blobals
(function() {
// The variable they all share
var counter = 0;
// Hook up the buttons
var buttons = document.querySelectorAll("input[type=button]");
Array.prototype.forEach.call(buttons, function(button) {
button.addEventListener("click", function() {
// Increment the shared variable
++counter;
// Show it and the button that incremented it
console.log(this.value + " clicked, counter = " + counter);
}, false);
});
})();
&#13;
<input type="button" value="Button 1">
<input type="button" value="Button 2">
<input type="button" value="Button 3">
&#13;