调用reportManager.save("/EditInitiatives.svc/SaveGridData");方法时出现错误
<script type='text/javascript'>
$(function () {
$('#saveReport, #save-report-bottom').click(function () {
$.blockUI({ message: '<h4><img src="/Images/busy.gif" /> Saving your changes.<br/>This operation might impact several reports at once.<br/>Please be patient.</h4>' });
uiController.disableSaveButton();
reportManager.save("/EditInitiatives.svc/SaveGridData");
});
var reportManager = function () {
var tableData = JSON.stringify(handsontable.getData());
var input = JSON.stringify({ "input": tableData });
alert("Data" + input);
save = function(saveUrl) {
alert("save" + saveUrl);
$.ajax({
url: saveUrl,
type: 'POST',
dataType: 'json',
data: input, //returns all cells' data
contentType: 'application/json; charset=utf-8',
success: function(res) {
if (res.result === 'ok') {
console.text('Data saved');
}
$.unblockUI();
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
};
}
</script>发布于 2013-05-16 01:18:46
您无法访问它,因为save是一个全局变量,不是reportManager的一部分。
之所以它是全局的,是因为变量前面缺少var。这将它放入全局命名空间中。它不会神奇地挂接到函数的块作用域。你需要使用一种面向对象的方法来让它工作。一些基本的想法是
function Report() {
var x = 1;
this.save = function () {
alert("First: " + x);
}
}
var report = new Report();
report.save();
function report_2() {
var x = 1;
return {
save : function () {
alert("Second: " + x);
}
}
}
var report2 = report_2();
report2.save();
var report_3 = (function () {
var x = 1;
var returnObj = {};
returnObj.save = function () {
alert("Third: " + x);
}
return returnObj;
//return {
// save : function() {
// alert("Third: " + x);
// }
//}
})();
report_3.save();大量示例:http://jsfiddle.net/5Zhsq/
发布于 2013-05-16 01:25:16
您已经声明了不带var关键字的save函数;因此它将在全局范围内声明,而不是作为reportManager的函数声明。
即使您将var关键字放在save函数之前,也无法从reportManager函数scope外部访问它。要将其公开,您需要某种程度的export它。下面是一个执行此操作的简单模式:
var reportManager = (function (self) {
function save(saveUrl) { ... } //this function is not public yet
self.save = save; //we are exporting the save function here
return self; //now we are returning an object with save function
})(reportManager || {});
reportManager.save("your-param-here"); //Now use your function the way you wanthttps://stackoverflow.com/questions/16571224
复制相似问题