如果我有类似的话:
App = {
editingMode: function ()
{
function setEditingMode(entityID) {
$('#editingMode').val('1');
$.ajax({
type: "POST",
url: "/Organisations/Manage/LockEntity/",
data: "entityID=" + entityID
});
}
function setEditingModeOff(entityID) {
if ($("#myform").valid() == true)
{
$('#editingMode').val('0');
$.ajax({
type: "POST",
url: "/Organisations/Manage/UnlockEntity/",
data: "entityID=" + entityID
});
}
}
}
};
我如何运行其中一个内部函数?
App.editingMode();
但是我该怎样做才能获得setEditingMode
??
答案 0 :(得分:8)
您可以使用其他结构来完成您想要的任务。我不知道它是否会破坏你正在使用的其他东西,所以我只想举个例子。我不确定这是否是实际的解决方案,请看看并告诉我这是不是你需要的。 如果您使用:
var App = {
editingMode:
{
setEditingMode: function(entityID) {
$('#editingMode').val('1');
$.ajax({
type: "POST",
url: "/Organisations/Manage/LockEntity/",
data: "entityID=" + entityID
});
},
setEditingModeOff: function(entityID) {
if ($("#myform").valid() == true)
{
$('#editingMode').val('0');
$.ajax({
type: "POST",
url: "/Organisations/Manage/UnlockEntity/",
data: "entityID=" + entityID
});
}
}
}
};
你可以这样调用editingMode的方法:
App.editingMode.setEditingModeOff(1);
请注意,它们仍将封装在App中,您不必将它们移动到全局范围。
答案 1 :(得分:0)
您需要返回对一个引用的引用,或者使其可以从函数外部访问,例如,将其附加到window
(有效地使其成为全局)或App
对象。
答案 2 :(得分:0)
虽然'Nikoloff'给出的答案可以让你调用这些功能,但我会指出有点不同(可能更好)的方法。 遵循“模块”模式概念不仅可以有效地解决您的问题,还可以让您拥有私有变量。 (在Javascript中搜索'模块模式',它将为您提供大量在线资源。)
App = {
editingMode: function ()
{
// Below var is no way directly accessible and act as private var
var privateVar =5;
// Below function is going to give access to private var
function getPrivateVar(){
return privateVar;
}
//Your functions - untouched
function setEditingMode(entityID) {
$('#editingMode').val('1');
$.ajax({
type: "POST",
url: "/Organisations/Manage/LockEntity/",
data: "entityID=" + entityID
});
}
function setEditingModeOff(entityID) {
if ($("#myform").valid() == true)
{
$('#editingMode').val('0');
$.ajax({
type: "POST",
url: "/Organisations/Manage/UnlockEntity/",
data: "entityID=" + entityID
});
}
}
return {
setEditingMode: setEditingMode,
setEditingModeOff: setEditingModeOff,
getPrivateVar: getPrivateVar
}
}
};
App.editingMode().setEditingMode();
console.log(App.editingMode().getPrivateVar());