将函数作为对象传递的Javascript会影响作用域
Javascript passing function as object affects scope
我正在传递一个函数作为参数,并且我正在失去某些对象的作用域,除非该对象在全局作用域中。我想从全局范围中删除该对象。
这里aliasGrid
在全局范围内,我不希望它是全局的。但是如果我移除它的全局作用域,我无法在下的deleteAliasName()
函数中访问它。
全球范围声明
aliasGrid = new AliasGrid();
aliasGrid.initialize();
问题是在showConfirmationDialog('deleteAliasName', 'noResponseConfirmationDialog',aliasNotificationLabel);
中,我将两个函数的名称作为字符串传递,然后当在确认对话框上单击"yes"answers"no'"按钮时,它们是可执行的。
这很好,但我希望deleteAliasName()
是AliasGrid函数的一个属性,并在showConfirmationDialog('deleteAliasName', 'noResponseConfirmationDialog',aliasNotificationLabel);
上作为参数传递,并在单击ComfirmationDialog的"yes"按钮时可执行。
AliasGrid.js
function AliasGrid() {
var aliasData= [];
var aliasNotificationLabel = 'Alias Name';
return {
load: function(){
//create grid
},
add: function(){
//adds record to grid
},
getAliasData: function () {
return this.aliasData;
},
delete: function () {
try {
var aliasNameGrid = dijit.byId('aliasNameGrid');
var deleteAliasNameSelection = aliasNameGrid.selection;
var deleteAliasNameCount = 0;
for (var i in deleteAliasNameSelection) {
deleteAliasNameCount++; }
if (deleteAliasNameCount > 0) {
showConfirmationDialog('deleteAliasName', 'noResponseConfirmationDialog',aliasNotificationLabel);
} else {
showNotificationDialog('okResponseNotificationDialog', 'Select Record(s) For Deletion !', aliasNotificationLabel);
}
} catch (error) {
showNotificationDialog('okResponseNotificationDialog', error, aliasNotificationLabel);
}
}
};
};
确认对话框
function showConfirmationDialog(yesFunction, noFunction, title) {
var confirmationDialog = new dijit.Dialog({
id: 'deleteGridRecordConfirmationId',
title: "<img src='images/niblogo.png' alt='National Insurance Board'class='loginDialogLogo'/>" + title,
content: '<table style= "width: 300px;">' + '<tr>' + '<th style="text-align:center; padding: 5px" colspan="2"><label> Are Your Sure ? </label></th>' + '</tr>' +
'</table>' +
'<div class="dijitDialogPaneActionBar" style="text-align:center;"><button id= yesBtnId onclick=' + yesFunction + ' >Yes</button><button id=noBtnId onclick=' + noFunction + '("deleteGridRecordConfirmationId")>No</button></div>'
});
confirmationDialog.show();
}
删除别名
function deleteAliasName() {
try {
var aliasData = aliasGrid.getAliasData();
var aliasStore = new dojo.store.Observable(new dojo.store.Memory({
data: aliasData,
idProperty: "id"
}));
var grid = dijit.byId('aliasNameGrid');
aliasStore.query({}).forEach(function (AliasName) {
if (grid.selection[AliasName.id]) {
aliasStore.remove(AliasName.id);
}
});
function showConfirmationDialog(yesFunction, noFunction, title) {
var confirmationDialog = new dijit.Dialog({
id: 'deleteGridRecordConfirmationId',
title: "<img src='images/niblogo.png' alt='National Insurance Board'class='loginDialogLogo'/>" + title,
content: '<table style= "width: 300px;">' + '<tr>' + '<th style="text-align:center; padding: 5px" colspan="2"><label> Are Your Sure ? </label></th>' + '</tr>' +
'</table>' +
'<div class="dijitDialogPaneActionBar" style="text-align:center;"><button id="yesBtnId">Yes</button><button id="noBtnId">No</button></div>'
});
var dijitDialog = $("div.dijitDialogPaneActionBar");
dijitDialog.children("button#yesBtnId").click(yesFunction);
dijitDialog.children("button#noBtnId").click(function()
{
noFunction("deleteGridRecordConfirmationId");
});
confirmationDialog.show();
}
别名网格:
function AliasGrid()
{
var aliasData= [];
var aliasNotificationLabel = 'Alias Name';
var self = this;
self.deleteAliasName = function() {
try {
var aliasData = self.getAliasData();
var aliasStore = new dojo.store.Observable(new dojo.store.Memory({
data: aliasData,
idProperty: "id"
}));
var grid = dijit.byId('aliasNameGrid');
aliasStore.query({}).forEach(function (AliasName) {
if (grid.selection[AliasName.id]) {
aliasStore.remove(AliasName.id);
}
});
}
};
return {
load: function(){
//create grid
},
add: function(){
//adds record to grid
},
delete: function () {
try {
var aliasNameGrid = dijit.byId('aliasNameGrid');
var deleteAliasNameSelection = aliasNameGrid.selection;
var deleteAliasNameCount = 0;
for (var i in deleteAliasNameSelection) {
deleteAliasNameCount++; }
if (deleteAliasNameCount > 0) {
showConfirmationDialog(self.deleteAliasName, 'noResponseConfirmationDialog',aliasNotificationLabel);
} else {
showNotificationDialog(okResponseNotificationDialog, 'Select Record(s) For Deletion !', aliasNotificationLabel);
}
} catch (error) {
showNotificationDialog(okResponseNotificationDialog, error, aliasNotificationLabel);
}
}
};
};
相关文章:
- Javascript em根据窗口/视口尺寸调整大小,不影响文档样式的text/css
- javascript getAttribute是否会影响性能或触发布局
- Javascript:当同时按下两个键时,留下其中一个也会影响另一个的听众
- JavaScript-在不影响索引的情况下将元素插入数组
- 更改复选框不影响javascript
- 阻止Javascript事件影响子元素
- javascript 函数返回的语法(空格)是否会影响结果
- 行之间有空格会影响 JavaScript 代码的性能吗?
- 数字精度如何影响 JavaScript 的性能,或者会影响性能
- 影响JavaScript / CSS的HTML空间格式
- 当 Node.js 调用 HTML 时,外部 Javascript 和 CSS 不会对 HTML 产生影响
- 是受(GWT)基类中方法数量影响的JavaScript对象的大小
- CSS显示会影响jQuery/Javascript
- Javascript不会影响HTML元素
- JavaScript字符串串联中null的影响
- 为什么全局变量没有't似乎受到内部作用域(Javascript)的影响
- 附加不受 javascript 影响的 jQuery 值
- 平滑滚动 JavaScript 影响模态功能
- Javascript影响两个下拉菜单
- 如何使javascript影响表中的所有值