2016-04-15 107 views
0

有人可以在我的jQuery书籍中解释这一点吗?我不明白这个变量的目的。使用变量初始化代码

下面是书中的一些解释:

的taskController会记住它在叫初始化。这一个局部变量被initalized确保不管多少次init方法被调用,它仅将实际初始化控制器一旦

jQuery代码:

tasksController = function() { 
    var taskPage; 
    var initialised = false; 

    return { 
     init : function(page) { 
      if (!initialised) { 
       taskPage = page; 
       $(taskPage).find('[required="required"]').prev('label').append('<span>*</span>').children('span').addClass('required'); 
       $(taskPage).find('tbody tr:even').addClass('even'); 

       $(taskPage).find('#btnAddTask').click(function(evt) { 
        evt.preventDefault(); 
        $(taskPage).find('#taskCreation').removeClass('not'); 
       }); 

       $(taskPage).find('tbody tr').click(function(evt) { 
        $(evt.target).closest('td').siblings().andSelf().toggleClass('rowHighlight'); 
       }); 

       $(taskPage).find('#tblTasks tbody').on('click', '.deleteRow', function(evt) { 
        evt.preventDefault(); 
        $(evt.target).parents('tr').remove(); 
       }); 

       $(taskPage).find('#saveTask').click(function(evt) { 
        evt.preventDefault(); 
        if ($(taskPage).find('form').valid()) { 
         var task = $('form').toObject(); 
         $('#taskRow').tmpl(task).appendTo($(taskPage).find('#tblTasks tbody')); 
        } 
       }); 
       initialised = true; 
      } 
     } 
    } 
}(); 
+0

像书中说的,他们希望控制器只能初始化一次。因此他们在首次使用init方法初始化控制器后将标志设置为true。之后,即使多次调用init方法,由于初始化变量的值也不会执行初始化代码。希望这可以帮助 –

回答

1

当此控制器初始化时,“初始化”变量设置为false。在控制器中调用init函数时,其中的第一行检查“初始化”变量是否为真(并且不是,它是假的),然后执行该代码块的其余部分。在该块的最后,您可以看到该变量设置为true。

这意味着下次运行此函数时,本地变量的值将为true,所以当您调用init函数时,它将首先重新计算该语句。由于此时“初始化”为真,对“初始化变量不是真”的检查将为假,因此该块内的代码将不会执行。