繁体   English   中英

使用.bind(mootools)和onClick事件

[英]Using .bind (mootools) with onClick event

我有代码(在一个对象内) onclick: this._addX.bind(this)然后在另一个对象onclick: this._addY.bind(this)

现在,_addX()和_addY几乎完全相同,除非它们最终调用(在click事件上)具有不同参数值的函数,比如_addX调用foo('x')和_addY调用foo('y')。 所以我尝试过:

onclick: this._add.bind(this,'x')onclick: this._add.bind(this,'y')在两个对象中。 当然我改变了_add来接受一个论点。

在运行时,当调用_add时,它不会看到任何传入的参数! 我用不同的语法摸索,但没有任何作用。 有任何想法吗? 原始语法工作正常(没有参数),但迫使我复制一个只有一行不同的大函数,这让我很痛苦。 提前致谢。

_add: function(which) {
    var me = this;
    var checkFull = function(abk) {
        if (abk.isFull) {
            alert("full");
        } else {
        alert(which);  // which is always undefined here!
        }
    };
    getAddressBook(checkFull); //checkFull is a fn called by getAddressBook
},

这工作并且它将范围保持在元素单击事件中,范围设置为类而不是元素 - 将范围传递给add方法没有意义,它已经具有:

var foo = new Class({
    Implements: [Options],
    add: function(what) {
        alert(what);
    },
    initialize: function(options) {
        this.setOptions(options);

        this.options.element.addEvents({
            click: function() {
                this.add(this.options.what);
            }.bind(this)
        });
    }
});

window.addEvent("domready", function() {
    new foo({
        element: $("foo"),
        what: "nothin'"
    });
});

只需创建一个id = foo的元素并单击它进行测试(警告nothin')。 如果你的onclick是你班级中的一个函数/事件处理程序而不是普通的元素点击事件,那么事情就会略有不同 - 在http://mootools.net/shell/上发布你工作的工作框架

如果您阅读我之前的答案,请忽略它。 MooTools .bind方法支持传递参数。 所以别的东西没有像你期望的那样工作:

onclick: this._add.bind(this, 'y');

这是一个关于JSBin简单设置,以显示bind如何真正传递参数。

绑定的唯一目的是为了“告诉” JS当你说你是什么意思对象this 即你作为一个参数传递来bind你希望this关键词将在你使用bind的函数内引用的对象的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM