我正在使用 javascript 研究模块模式,下面的代码是我的第一次尝试,任务列表。我对变量的范围有一个小问题。
在我的一种公共方法中,我可以访问 tasks 变量,而在另一种方法中我不能。我会尽力提供更多细节。
我有我的公共方法“addItem”,它基本上在数组tasks.push(values);
中执行“推送”,此时它运行良好,我的数组获取新数据。
但是当我尝试在我的其他公共方法“deleteTask”中显示相同的变量时,例如:
console.log('deleteTask: ', tasks);
. 它返回给我“deleteTask:未定义”
在第二个代码片段中,我将展示如何访问这些方法。
好吧,基本上我想了解,为什么我无法访问“deleteTask”中的私有变量?为什么我可以在“addItem”中?有什么区别?它看起来很简单,但我还没有走这么远。
var todoModule = (function ($) {
var tasks = [];
function doListOfTasks() {
for(var i=0; i<tasks.length; i++){
$('<li>', {
name : 'liTask',
id : 'liTask'+i,
html : tasks[i].title + ' - '
}).appendTo('#listOfTasks');
$('<input>', {
type : 'button',
name : 'delTask',
id : 'delTask'+i,
value : 'Del'
}).appendTo('#liTask'+i);
$('#delTask'+i).data('idTask', i);
}
}
function clearListTasks(){
$('#listOfTasks').html('');
}
return {
init: function(){
this.getListTasks();
},
getListTasks: doListOfTasks,
addItem: function( values ) {
tasks.push(values);
clearListTasks();
this.getListTasks();
console.log('addItem: ', tasks);
},
deleteTask: function(item) {
console.log('deleteTask: ', tasks);
var tasks = $.grep(tasks, function(value, item) {
//console.log('value: ', value);
//console.log('item: ', item);
return value != item;
});
clearListTasks();
doListOfTasks();
}
};
}(jQuery));
我的 HTML:
这里我通过事件访问公共方法:
<script type="text/javascript">
$( document ).ready(function() {
todoModule.init();
$( '#btnAdd' ).click(function() {
todoModule.addItem({
title: $('#tarefa').val(),
date: '01/01/1999',
flag: 0
});
});
$('ul').on('click', 'input', function() {
var idTask = $('#'+this.id).data('idTask');
todoModule.deleteTask(idTask);
});
});
</script>
我正在通过这个链接研究这个模式