2016-04-23 19 views
0

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(); 
} 
+0

パスの配列。常に。 –

+1

'[] 'の代わりに' var obj = {} ' –

答えて

1

はい、それはスコープの問題です。 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(); 
} 

EDIT:

私はあなたが認識しているかどうかわからないんだけど、[]Arrayの省略形です。作成しようとしているものがObjectの場合は、割り当てをvar obj = {};

+0

それはうまくいった!ありがとうございました! – Jennifer

+0

あなたはそれがオブジェクトではなく配列なのです。 – Jennifer

0

に変更する必要があります。もちろんobjは範囲外です。グローバルスコープではなく、関数に渡されません。
@ smailiの回答を修正するか、objをこの関数に渡すことができます。

function sortColumn(obj, column) { 
    obj.Tickets.column.sort(); 
    return obj; 
} 

次に、両方の引数を指定して呼び出します。

var sortedObj = sortColumn(obj, column); 

Further explanation of scoping in Javascript

+0

関数の呼び出しはaspxページにあり、変数がそこに存在するかどうかわかりません。 – Jennifer

+0

@Jennifer大丈夫です。他の関数がグローバルスコープで宣言された変数を '破損'する可能性があるため、スコープを実際に理解するのに役立ちます。 – Iro

関連する問題