我目前正在学习模块化javascript。我不知道为什么我在一个物体中所做的功能没有被识别出来。这是一个人员应用程序列表。有人可以看看吗? 这是我的people.js文件
(() => {
var people = {
people: ['Will', 'Laura'],
init: () => {
this.cacheDom();
this.bindEvents();
this.render();
},
cacheDom: () => {
this.$el = $('#peopleModule');
this.$button = this.$el.find('button');
this.$input = this.$el.find('input');
this.$ul = this.$el.find('ul');
this.template = this.$el.find('#people-template').html();
},
bindEvents: ()=>{
this.$button.on('click', this.addPerson.bind(this));
},
render: () =>{
var data = {
people: this.people,
};
this.$ul.html(Mustache.render(this.template,data));
},
addPerson: () => {
this.people.push(this.input.val());
this.render();
}
};
people.init();
})();
这是我的HTML
<!DOCTYPE>
<html>
<head>
<title>Nate</title>
</head>
<body>
<div>
<h1>This is my Wonderful application</h1>
</div>
<div id="peopleModule">
<h1>People</h1>
<input placeholder="name" type="text">
<button id="addPerson">Add Person</button>
<ul id="people">
<script id="people-template" type="text/template">
{{#people}}
<li>
<span>{{.}}</span>
<i class="del">X</i>
</li>
{{/people}}
</script>
</ul>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.1.2/mustache.min.js"></script>
<script src="people.js" type="text/template"></script>
</body>
</html>
非常感谢。 Javascript真是太棒了!
答案 0 :(得分:1)
这是因为箭头函数会自动绑定到外部this
,在您的情况下为window
。您的函数内部的this
不是您认为的那样(在任何函数中尝试console.log(this)
,看看我指的是什么)
相反,请使用完整版:init: function() {
或简短方法版本:init() {
答案 1 :(得分:0)
people.js
不会被浏览器运行。即使text/template
是JavaScript文件,您的浏览器也不会运行它,因为它不知道如何处理<script src="people.js"></script>
。
type
删除var row = '... onclick=\"Delete_Row(\'+table_len+\')\"></td></tr>';
属性。