2012-04-08 38 views
5

Tất cả các câu hỏi mà tôi đã đào tạo trong bảng không thực sự trả lời một câu hỏi mà tôi có. Vì vậy, tôi sẽ hỏi các chuyên gia ở đây. Trước hết, cảm ơn bạn rất nhiều vì đã đọc. Tôi thực sự đánh giá cao những gì Stackoverflow là tất cả về, hy vọng tôi có thể đóng góp bây giờ mà tôi là một thành viên.Tạo JSON từ jQuery mỗi vòng

Tôi muốn tạo động một đối tượng JSON dựa trên các biến được đặt từ một đối tượng JSON khác với một vòng lặp jQuery. Tôi nghĩ rằng cú pháp của tôi và có lẽ kiến ​​thức của tôi về công cụ này là một chút đi.

Tôi muốn kết thúc với cấu trúc JSON sau:

{ 
    desktop:{ 
    title:300, 
    rev:200 
    } 
} 

đâu "desktop" là một giá trị từ một đối tượng JSON không trong vòng lặp này, tôi có thể gọi đó là không có vấn đề, trên thực tế nó là thực sự là giá trị tên tôi đặt trên đối tượng JSON khác. Tôi đang lặp qua một mảng trong đối tượng được gọi là cột nhưng muốn đặt một đối tượng riêng có chứa tất cả các chiều rộng vì các cột có thể điều chỉnh và có thể truy cập được qua một khung khác mà tôi sẽ đẩy nó đến, tôi muốn giữ lại các chiều rộng đó.

Tôi đã cố gắng để làm điều này từ bên trong vòng lặp:

var colWidths = {}; 
$.each(columns, function(i) { 
    colWidths.desktop.title = columns[i].width; 
}); 

Tôi có thể cảnh báo cột [i] .width thành công. Vấn đề tôi có là tạo và truy cập vào vấn đề này. Tất cả mọi thứ tôi dường như đang làm có vẻ đúng nhưng đây không phải là trường hợp. Có thể là tôi hay thiết lập của tôi? Bạn có thể vui lòng chỉ cho tôi cách mã hóa chính xác không? HOẶC Tôi có thể tạo một đối tượng Javascript nếu điều này là không thể. Cảm ơn trước!

+0

Bạn có thực sự cố gắng để tạo ra JSON văn bản? Dường như với tôi như bạn đang tạo một đối tượng JavaScript. –

Trả lời

3

Chào mừng bạn đến với Stackoverflow. Bạn không viết bất kỳ thông báo lỗi nào bạn nhận được, vì vậy tôi giả định như sau.

// prepare the object correctly first 
var colWidths = { 
    desktop: { 
     title: 0 
    } 
}; 
// then ADDING each value with += instead of = 
// (because in your code you will just have the last value) 
$.each(columns, function(i) { 
    colWidths.desktop.title += columns[i].width; 
}); 

EDIT

var grid = { 
    "name": "desktop", 
    "columns": [ 
     { 
     "id": "icons", 
     "width": 50}, 
    { 
     "id": "title", 
     "width": 200}, 
    { 
     "id": "name", 
     "width": 300}, 
    { 
     "id": "revision", 
     "width": 400} 
    ] 
}; 

var columns = grid.columns; 
var gridName = grid.name; 

var colWidths = {}; 

// CHANGE HERE 
colWidths[gridName] = {}; 

$.each(columns, function(c) { 

    var col = columns[c]; 
    var colname = col.id; 
    var colwidth = col.width; 

    // CHANGE HERE 
    var thisGrid = colWidths[gridName]; 
    if(!thisGrid[colname]) thisGrid[colname] = 0; 

    thisGrid[colname] += colwidth; 

}); 

//alert(colWidths.desktop.title);​ 
document.write(JSON.stringify(colWidths)); 

// RESULT: 
// {"desktop":{"icons":50,"title":200,"name":300,"revision":400}} 
+0

Ok Tôi vẫn chưa được đặt chính xác. Khi bạn chuẩn bị đối tượng, tôi cần phải có "máy tính để bàn" được năng động và "tiêu đề" là năng động. Đối tượng này có thể khác nhau theo thời gian. – Paul

+0

Heres fiddle của tôi tôi vẫn có thể làm điều đó sai http://jsfiddle.net/LW7FJ/ – Paul

+0

Xin lỗi một Fiddle tốt hơn ở đây, tôi loại bỏ một số thông tin không đáng kể. http://jsfiddle.net/LW7FJ/6/ như bạn có thể thấy điều này không được thiết lập chính xác đối tượng. Tôi muốn trả lại nó như cảnh báo (colWidths.desktop.title) vv ... – Paul

Các vấn đề liên quan