将数组传递给函数或确保它在范围内?
问题描述:
我想使用onclick函数对数组进行排序,并且我得到错误obj未定义。也许它不在范围之内?将数组传递给函数或确保它在范围内?
js文件:
function pageLoad() {
var url = API_URL + "/api/Ticket/GetTickets";
var data = Ajax.getData(url);
var obj = [];
var tickets = JSON.parse(data.JsonResult);
obj.Tickets = tickets;
Tickets.Data = obj;
var viewModel = {
theObject: [obj.Tickets]
};
ko.applyBindings(viewModel);
}
function SortColumn(column) {
obj.Tickets.column.sort();
}
答
是的,这是一个范围的问题。将你的obj
声明移到函数之外,这样它们对于两者都是可见的。
事情是这样的:
var obj = []; // <-- move here
function pageLoad() {
var url = API_URL + "/api/Ticket/GetTickets";
var data = Ajax.getData(url);
var tickets = JSON.parse(data.JsonResult);
obj.Tickets = tickets;
Tickets.Data = obj;
var viewModel = {
theObject: [obj.Tickets]
};
ko.applyBindings(viewModel);
}
function SortColumn(column) {
obj.Tickets.column.sort();
}
编辑:
我不知道,如果你是知道的,但[]
是一个Array简写。如果您要创建的是Object,那么您应该将您的任务更改为var obj = {};
答
当然obj
不在范围内。它不在全局范围内,而且你没有将它传递给函数。
您可以使用@ smaili的答案作为解决方法,或者您可以将obj
传递给函数。
function sortColumn(obj, column) {
obj.Tickets.column.sort();
return obj;
}
然后你会用两个参数来调用它。
var sortedObj = sortColumn(obj, column);
通行证阵列。总是。 –
'var obj = {}'而不是'[]' –