我有一个使用对 MVC 控制器的 JSON 调用来填充表的方法,如下所示:
pub.PopulateTable = function (args) {
var page = 1,
// ...variables snipped...
OnRowClicked;
// Unpack arguments...
if (args != null) {
// ...details snipped...
OnRowClicked = args.OnRowClicked;
}
// Build path...
path = path + controller + '/' + action + '/';
if (actionId != null && actionId != '') {
path = path + actionId + '/';
}
path = path + page;
$.getJSON(path, function (data) {
if (data.Values.length > 0) {
// Clear table body, then inject list...
$tableBody.html('');
$.tmpl($template, data.Values).appendTo($tableBody);
// ...snip various instructions, for brevity...
// Add on-click returning...
$('tr').click(function () {
var $row = $(this),
rowData = {};
rowData.SomeProperty = $row.children('#IdColumn').val();
$modalDialog.modal('hide');
OnRowClicked(rowData); // Problem!!!
});
} else {
$tableBody.html("<tr><td colspan=2>No entries...</td></tr>");
}
});
也许是因为 getJSON 是一个异步操作,但是通过方法参数对象传入的 OnRowClicked() 方法在尝试使用以下传递给它的(简单)方法时遇到了引用错误:
function textFieldRowClickHandler(rowData) {
$myTextFieldHere.val(rowData.SomeProperty);
}
当我打开对话框(导致 PopulateTable 运行并绑定其中的事件)并选择一条记录(从而触发 click 事件)时,我不断收到引用错误,因为 rowData.SomeProperty 未定义,即使回调将点击事件绑定到每个 tr 标签,当它被点击时,关闭对话框,获取值,构建一个对象,并将其传递给给定的方法。
如上所述 - 我知道 getJSON 是一个异步操作,这就是我认为我的问题出现的地方 - 我不熟悉异步范式。我到底做错了什么?