Jas*_*nce 5 jquery prototypejs
Mornin'全部.
我正在将原型代码重写为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));
Run Code Online (Sandbox Code Playgroud)
我结束了:
this.observers = $.each(events , function(i, name) {
var handler = "on"+name;
$element.live({
name: handler
});
}
Run Code Online (Sandbox Code Playgroud)
我完全错了?我不明白原型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);
}
Run Code Online (Sandbox Code Playgroud)
至于原型到 jQuery 的翻译(首先阅读我上面关于绑定/代理的解释),这应该与上面的代码片段紧密匹配:
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));
Run Code Online (Sandbox Code Playgroud)
我从原型片段中假设:
this是一个原型类或一个普通的 JS 对象,它是当前上下文。this.element是对 DOM 元素的引用,在 jQuery 的情况下是 jQuery 包装的 DOM 元素。onclick, onfocus类似的可能回调是this上下文中的方法。如果没有进一步了解您的代码如何工作或您试图重写 Prototype 插件的哪一部分,这就是我能帮助您的(我希望这已经足够了)。