我有以下javascript
(function (document, window, $) {
'use strict';
var Site = window.Site;
$(document).ready(function ($) {
Site.run();
var $this = this;
// Init function
// ------------------------
(function () {
function init() {
$('tr[data-toggle="slidePanel"]').click(function (e) {
e.preventDefault();
var me = $(this);
.... some code here
}
init();
})();
// Employee function
// ------------------------
(function () {
function getData() {
... some code here
// here is the problem... how can I call buildTable
$this.buildTable(data);
... some code here
I want to call also the init function on the top.
}
function buildTable(data) {
$('#contactsContent').html(data);
}
getData();
})();
});
})(document, window, jQuery);
在员工主要功能内部我在getData()
内部调用函数buildTable()
时遇到问题,之后我想在顶部调用init()
函数
有任何线索吗?
答案 0 :(得分:2)
getData()
和buildTable()
是彼此的兄弟函数,因此它们在同一范围内。无需使用$this
为呼叫添加前缀。
只需使用:buildTable(data);
我还必须说你似乎有很多不必要的函数包装器,当它被删除时,也可以直接调用init()
。
您还希望两次致电init()
。是吗?
最后,如果你真的只有你在这里展示的代码,那么就没有必要用最外面的函数包装所有代码,因为一旦DOM是jQuery document.ready
函数就会执行准备好了。
以下是您的代码的重写版本:
$(function() {
'use strict';
var Site = window.Site;
Site.run();
// Init function
(function init() {
$('tr[data-toggle="slidePanel"]').click(function (e) {
e.preventDefault();
var me = $(this);
//.... some code here
}
})();
// Employee function
//... some code here
buildTable(data);
//... some code here
init();
function buildTable(data) {
$('#contactsContent').html(data);
}
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:0)
为了通过简约更改实现您的目标,您可以执行以下操作:
更改
function init() {
到
window.init = function() {
然后在需要时随window.init()
调用它。这将是一个全局变量,可以从任何范围访问。如果这违背了您的意图,那么请不要选择此解决方案。您需要这样做,因为init
与您打算使用它的范围不同。另一方面,您可以按原样拨打buildTable
。
通常,如果函数在范围内或位于其中一个祖先范围内,则可以从范围调用函数。