2013-05-10 91 views
0

原型我有這個當前的實現(我知道是不正確的):暴露DOM元素與JS

kf.Ui.modal = function(){ 
     this.el = $('#modal'); 
     this.els = { 
      done: this.el.find('[name="modal-btn-done"]') 
     } 
    }; 

    kf.Ui.modal.prototype.done = function(){ 
     return this.els.done; 
    }; 

    var modal = new kf.Ui.modal(); 
    modal.done().on('click', function(){ alert('done clicked') }); 

如果你看到什麼,我想在這裏實現的,這可怎麼辦呢?所以,我想公開一個包含在this.el中的DOM元素,並允許我自己將事件附加到實例化中。

+1

?它不應該是'modal.done()。on ...'嗎? – drinchev 2013-05-10 13:37:58

+0

@drinchev你說得對。不覺得它需要成爲一個功能。 – benhowdle89 2013-05-10 13:39:39

+0

現在你修正了'.done()'調用,一切看起來都正確。你的'this.el.find()'會返回一個帶有匹配的DOM元素的jQuery對象,然後你的'.done()'將返回這個jQuery對象,你的'.on()'會綁定處理器。 – 2013-05-10 13:41:39

回答

0

基本上一切都不錯,但我寫不出這麼大的意見

我會做,這將是這樣:你不是有一個錯字

function Modal(element) { 
    this.el = $(element); 
    this.done = this.el.find("button"); 
} 

var modal = new Modal('div#mymodal'); 

modal.done.on('click', ...); 
+0

會出現問題如果這個按鈕是在Modal創建完成後添加的,而且基於'div#mymodal'而不僅僅是'#mymodal'選擇效率較低 – 2013-05-10 13:47:28

+0

是的,在這種情況下它可能是'var that = this; this.done = function(cb){that.el.on('click','button',cb);}'and later'modal.done(function(){console.log(「I'm done」);}) ;' – drinchev 2013-05-10 13:52:25