私はjavascriptでモジュールパターンを勉強しています.以下のコードは私の最初の試みであるタスクのリストです. 変数のスコープに小さな問題があります。
私のパブリック メソッドの 1 つで、tasks 変数にアクセスできますが、別のメソッドではアクセスできません。詳細をお伝えしようと思います。
私は、tasks.push(values);
この瞬間に配列で基本的に「プッシュ」を行うパブリックメソッド「addItem」を持っています。これはうまく機能し、私の配列は新しいデータを取得します。
しかし、他のパブリック メソッド「deleteTask」で同じ変数を表示しようとすると、例:
console.log('deleteTask: ', tasks);
. 「deleteTask:未定義」が返されます
2 番目のコード スニペットでは、メソッドにアクセスする方法を示しています。
さて、基本的に私は理解しようとしていますが、なぜ「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>
このリンクからこのパターンを研究しています