JavaScript:简单框架无法正常工作

时间:2013-09-18 13:31:27

标签: javascript prototype javascript-framework

我正在尝试创建一个JS框架。

这是我的JS代码:

function $(id)
{
  var info={
     version:1.0
  }

  if(id)
  {
    if(window === this)
    {
        console.log('window id == '+id);
        return new $(id);
    }

    console.log('id == '+id);
    this.e = document.getElementById(id);
    return this;
  }
  else{
         return info;
   }
}



$.prototype={
    controller:function(pl)
    {
       if(typeof pl.events === 'function')
       {
        console.log('event is function');
       }
    },
    click:function(callback)
    {       
        this.e.addEventListener('click', callback, false);
        return this;
    }   
};

我在这称呼此框架

    <div id='test'>
        <div id='btn1'>Button1</div>    
    </div>
    <div id='btn2'>Button2</div>


    <script>            
        $('test').controller({
            events:function()
            {
                $('btn1').click(function(){
                    alert('btn1 clicked');
                }); 
            }
        }); 

        $('btn2').click(function(){
            alert('btn2 clicked');
        });             

    </script>

输出

window id == test
id == test
event is function
window id == btn2
id == btn2

问题是 btn1 点击事件无效但 btn2 点击工作正常。可以提出一些解决方案或一些更好的方法来使JS框架工作吗?

1 个答案:

答案 0 :(得分:0)

  

问题是btn1点击事件无法正常工作

好吧,你没有附上听众。你确实将一个函数传递给了controller方法,它可以做到这一点,但它从未被调用过。

controller: function(pl) {
    if (typeof pl.events === 'function') {
        console.log('event is function'); // but do nothing?
        // add this:
        pl.events();
    }
}