暴露DOM元素与JS

暴露DOM元素与JS

问题描述:

原型我有这个当前的实现(我知道是不正确的):暴露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

基本上一切都不错,但我写不出这么大的意见

我会做,这将是这样:你不是有一个错字

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