我正在尝试创建一个Object类,它将获取数据并创建元素列表。我还想在新的LI上附加一个click事件来触发类的方法。但是,使用
时el.click(function() {
this.method();
});
this
不再引用该类,因此单击li
会给您一个未定义的方法错误。关于如何将类方法附加到新创建元素的建议?
JS代码:
if (typeof Object.create !== 'function') {
Object.create = function(o) {
function F() {}
F.prototype = o;
return new F();
};
}
var base = {
init: function(data) {
this.data = data;
this.show_data();
},
show_data: function() {
for (i = 0; i < this.data.bindings.length; i++) {
var $item = $('<li>' + this.data.bindings[i].ircEvent + '</li>');
$item.click(function() {
this.show_clicked(i);
});
$('#it').append($item);
}
},
show_clicked: function(index) {
console.log('clicked in method');
}
};
var extended = {
show_alert: function() {
alert('second class');
}
};
var myObj = {
"bindings": [
{
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"},
{
"ircEvent": "PRIVMSG",
"method": "deleteURI",
"regex": "^delete.*"},
{
"ircEvent": "PRIVMSG",
"method": "randomURI",
"regex": "^random.*"}
]
};
$(document).ready(function() {
var baseObj = Object.create(base);
baseObj.init(myObj);
});
答案 0 :(得分:1)
为了使您的方法在click函数中起作用,只需引用包含该对象的全局变量。
该行:
this.show_clicked(i);
应更改为:
base.show_clicked(i);
如果希望索引值显示在最终结果中,则必须将其作为数据传递,或使用jquery确定单击了哪个索引。
这是一个有效的更新小提琴 - http://jsfiddle.net/EwC3r/4/