Mornin'all。
我正在将原型代码重写为JQuery插件,并且不知道如何处理这一部分:
this.observers = events.map(function(name) {
var handler = this["on" + name.].bind(this);
this.element.observe(name, handler);
return { name: name, handler: handler };
}.bind(this));
我最终得到了:
this.observers = $.each(events , function(i, name) {
var handler = "on"+name;
$element.live({
name: handler
});
}
我完全错了? 我不明白原型bind()的目的。
感谢您的帮助!
编辑:上下文是一个插件init()函数,我附加“动态”事件,其处理程序编码为私有方法......plugin.init = function() {
// the plugin's final properties are the merged default and user-provided options (if any)
plugin.settings = $.extend({}, defaults, options);
if (!plugin.observers) {
var events = ("mouseover mouseout").split(" ");
plugin.observers = $.map(events, $.proxy(function(name) {
var handler = $.proxy(this['on' + name], this);
$element.bind(name, handler);
return { name: name, handler: handler };
}, this));
}
console.log(plugin.observers);
}
答案 0 :(得分:1)
关于Prototype-to-jQuery的翻译(首先阅读我对bind / proxy的上述解释),这应该与上面的代码段紧密匹配:
this.observers = $.map(events, $.proxy(function(name) {
var handler = $.proxy(this['on' + name], this);
this.element.bind(name, handler);
return { name: name, handler: handler };
}, this));
我假设从Prototype片段:
this
是原型类或当前上下文的普通JS对象。this.element
是对DOM元素的引用,在jQuery案例中是jQuery包装的DOM元素。onclick, onfocus
和类似的可能回调是this
上下文中的方法。如果没有关于你的代码如何工作的更多上下文或者你试图重写的Prototype插件的哪一部分,那么就像我可以帮助你一样(我希望这已经足够了)。