如何在模块模式版本中以正确的方式调用事件

时间:2016-03-09 21:53:01

标签: structure

阅读文章https://css-tricks.com/how-do-you-structure-javascript-the-module-pattern-edition/后,我在项目中做了类似的事情 - 创建了结构:



var SomeStructure = {

	
	var1: $('#tag1'),
	
	init: function() {
		
		this.var1.on('click', function (e) {
			SomeStructure.mouseClick(e);
		});
    },
    mouseClick: function(e) {
      e.preventDefault();
      alert("tag clicked");
    }
  
 }

SomeStructure.init();
    

div {
  cursor: pointer;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tag1">Click me!</div>
&#13;
&#13;
&#13;

我的代码正常运行,但我想知道是否可以重写代码:

this.var1.on('click', function (e) { SomeStructure.mouseClick(e); });

这样在单行$(&#39;#tag1&#39;)之后调用函数mouseClick,以一些更简洁的方式在一行中没有匿名函数,类似于: this.var1.on('click', this.mouseClick);

但是这种方式没有e ..

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我必须为事件监听添加一个新函数ListenEvents,以便可以在里面添加许多新的侦听器来制作清晰的工作流对象(如此处所述http://derickbailey.com/2015/08/07/making-workflow-explicit-in-javascript/):

`var SomeStructure = {     var1:$('#tag1'),     init:function(){         this.ListenEvents();

},
ListenEvents: function() {
    self = SomeStructure;
    self.var1.on('click', self.mouseClick);
},
mouseClick: function() {
  alert("tag clicked");
}

}

SomeStructure.init();`