也许我这样做错了,对如何改进我的代码的建议表示赞赏。我的情况是这样的:我有一个工具栏,其中包含由回调填充的不同元素。我不想使用show()或hide()命令,我更喜欢使用detach,但我认为应该有一个很好的方法来处理它。这是我的代码:
entryView = function _entryView() {
var menuButton = $('<div/>').addClass('menuButton');
toolBar();
$.getJSON('ajax', function(o) {
var $enum2 = ss.IEnumerator.getEnumerator(dto.TransmittalDates);
while ($enum2.moveNext()) {
var dateTime = $enum2.get_current();
$('.menu').append($('<div/>').addClass('menuitem').text(dateTime.toString()));
}
});
}
toolBar = function _toolBar() {
var flyoutMenu = $('<div/>').addClass('menu');
$('.menuButton').click(function(o) {
$('.menubutton').append(flyoutMenu);
});
我快速剪切并粘贴并重命名变量以使它们有意义。正如您在条目中看到的那样,我构建了工具栏,我做的最后一件事是ajax调用。但是,在“点击”事件之前不会创建菜单,因此无法添加。
我意识到有全局变量是坏的,所以我试图避免这种情况,但我认为最好的情况是让ajax调用填充一个Menu变量,当创建DOM时,从同一个Menu项中拉出来。我怎么把它关掉?有没有更好的方法呢?
编辑:在工具栏功能上稍微提一下,我想我现在应该是正确的。
答案 0 :(得分:0)
我对代码的某些部分感到困惑:
entryView
函数以及何时调用它?toolBar
函数存在而不是内联?从哪里来的呢?为什么要创建这样的功能?创建一个没有var
的变量是不好的做法,总是生成全局变量,并且在ES5严格模式下将被禁止。你应该创建这样的函数:
var someFunction = function(arg1, arg2) { … };
或者像这样:
function someFunction(arg1, arg2) { … }
_toolBar
)? “私人”名称仅在函数范围内。菜单不必在全局范围内,只是在两个函数共有的范围内。
我会像这样重构它(对应用程序的设计知之甚少),内联toolBar
:
function entryView() {
var menuButton = $('<div/>' {'class': 'menuButton'}), menu = $('<div/>', {'class': 'menu'});
$.getJSON('ajax', function(o) {
var $enum2 = ss.IEnumerator.getEnumerator(dto.TransmittalDates);
while ($enum2.moveNext()) {
var dateTime = $enum2.get_current();
$('.menu').append($('<div/>' {'class': 'menuItem'}).text(dateTime.toString()));
}
});
menuButton.click(function(o) {
menuButton.append(menu);
});
}