2010-01-10 41 views
1

我的代碼(內部的一個對象) onclick: this._addX.bind(this) 然後內部另一個目的現在 onclick: this._addY.bind(this) 與onClick事件使用.bind(mootools的)

,_addX()和_addY幾乎相同,除了它們的兩個端(在click事件上)調用具有不同參數值的函數,比如說_addX調用foo('x')和_addY調用foo('y')。所以我嘗試過:

onclick: this._add.bind(this,'x') and 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 
}, 
+0

@Dave,你的代碼應該可以工作,但是不是。你可以發佈'_add'方法聲明,以便我們解決它嗎? – 2010-01-10 04:52:51

+0

好吧,你是對的。它看起來很好。 (我也修正了縮進)我知道在MooTools中定義一個事件的唯一兩種方式是在構造函數中('{events:{'click':function(){...}}')或者使用'addEvent' 。你如何附加'onclick'函數? – 2010-01-10 05:11:16

+0

實際上在YUI中創建按鈕並在那裏使用onClick:屬性。 VAR btn_Add =新CO.GG.widget.Button({ ID: '添加', 標籤: '添加X', 的onclick:this._add.bind(此, 'X') }); 我不知道'哪個'(在最上面的文章中)只是沒有從_add直到回調checkFull()? – Dave 2010-01-10 05:19:49

回答

1

如果你讀過我以前的答案,不理會它。 MooTools .bind方法支持傳遞參數。所以別的東西,你想到的是不工作:

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

這裏是一個simple setup on JSBin展示如何綁定確實只傳遞參數。

+0

我會試試這個。這些文檔顯示語法爲myFunction.bind([bind [,args [,evt]]]);這意味着this._add.bind(this,'x') ... ...更新:嘗試過這種語法,仍然沒有骰子。> – Dave 2010-01-10 04:46:18

+0

@Dave忽略我的第一個答案。對不起,我給你發錯了方向。 – 2010-01-10 04:46:42

+0

無後顧之憂。欣賞努力。 – Dave 2010-01-10 04:50:00

0

綁定的唯一目的是爲了「告訴」 JS當你說this你的意思對象。即您將參數傳遞給bind您希望this關鍵字將在您使用bind的函數內引用的對象的實例。

+0

有可能我誤解了.bind上的mootools文檔 - 但是您是否說我無法發送參數給綁定函數,因爲我正在嘗試在此處進行操作?似乎不太可能....我希望不是真的。你聽起來比我更專家,但這是一個特別的mootools。綁定,而不僅僅是一個綁定 - 謝謝 – Dave 2010-01-10 04:41:42

+0

不,你理解文檔很好。 @Itay你的答案是不正確的每個MooTools文檔:http://mootools.net/docs/core/Native/Function#Function:bind – 2010-01-10 04:47:17

+0

@Doug Neiner只要事件發生,我相信我是正確的。如果你能得到一個代碼示例,那麼我們都有了新的知識。 – 2010-01-10 21:20:29

2

這個作品,它保持與設置爲分類的範圍,而不是元素的元素點擊事件中的範圍 - 也順便範圍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/

+0

謝謝。這似乎改變了我發佈的問題。我沒有改變一切從它已經寫好的方式的自由。我只是想拿兩塊幾乎相同的代碼,並將它們更改爲一個用一個參數指導他們的不同CES。不管怎麼說,還是要謝謝你。 – Dave 2010-01-10 22:11:22

+0

erm - 那麼奇怪,因爲你的原始解決方案適用於我:http://mootools.net/shell/zD7Hz/ – 2010-01-11 09:20:48