2012-06-05 23 views
10

Những gì tôi có và những gì tôi cần. Dễ thôi. (Các thuộc tính có được lồng)

Các tùy chọn mặc định:

{ 
    sDom: 'frt<"tfoot"lp>', 
    bInfo: false, 
    sPaginationType: "full_numbers", 
    oLanguage: { 
    sSearch: "", 
    sLengthMenu: "Show _MENU_", 
    oPaginate: { 
     sFirst:  "|<<", 
     sLast:  ">>|", 
     sNext:  ">>", 
     sPrevious: "<<" 
    } 
    } 
} 

tùy chọn Thực tế:

{ 
    oLanguage: { 
    oPaginate: { 
     sNext:  "MODIFIED" 
    } 
    } 
} 

Kết quả của $ .extend:

{ 
    sDom: 'frt<"tfoot"lp>', 
    bInfo: false, 
    sPaginationType: "full_numbers", 
    oLanguage: { 
    oPaginate: { 
     sNext:  "MODIFIED" 
    } 
    } 
} 

Những gì tôi cần là mở rộng đúng các tùy chọn mặc định bằng các tùy chọn thực tế và nhận kết quả sau (một thuộc tính đã được sửa đổi):

{ 
    sDom: 'frt<"tfoot"lp>', 
    bInfo: false, 
    sPaginationType: "full_numbers", 
    oLanguage: { 
    sSearch: "", 
    sLengthMenu: "Show _MENU_", 
    oPaginate: { 
     sFirst:  "|<<", 
     sLast:  ">>|", 
     sNext:  "MODIFIED" 
     sPrevious: "<<" 
    } 
    } 
} 

Vấn đề là hàm $ .extend bỏ qua thuộc tính lồng nhau và chỉ hoạt động các thuộc tính cấp một. Bây giờ tôi đã tự $ .extend mỗi thuộc tính lồng nhau, nhưng tôi đoán nó không phải là một giải pháp.

Trả lời

37

Bạn cần a recursive copy bằng cách thông qua true như tham số đầu tiên:

var defaults = {...} 
var actual = {...} 

//recursively merge to a blank object 
console.log($.extend(true,{}, defaults, actual))​ 
Các vấn đề liên quan