2012-06-05 4 views
10

Was ich habe und was ich brauche. Es ist einfach.

Die Standardoptionen (es gibt verschachtelte Objekte):

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

Actual Optionen:

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

Das Ergebnis von $ .extend:

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

Was ich brauche, ist zu erweitern Sie die Standardoptionen mit den tatsächlichen Optionen und erhalten Sie das folgende Ergebnis (eine Eigenschaft wurde geändert):

Das Problem ist, dass $ .Extend-Funktion verschachtelte Eigenschaften ignoriert und nur Eigenschaften der ersten Ebene verwendet. Nun habe ich manuell jede der verschachtelten Eigenschaften $ .Extend, aber ich denke, es ist keine Lösung.

Antwort

37

Sie müssen a recursive copy von true als ersten Parameter übergeben:

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

//recursively merge to a blank object 
console.log($.extend(true,{}, defaults, actual))​ 
Verwandte Themen