2012-04-13 7 views
0

Ich weiß, dass es wahrscheinlich eine sehr kleine und einfache Vererbungs- oder Erweiterungslösung dafür gibt, aber ich hoffe, dass diese Frage sich für mehr als nur für mich als nützlich erweisen wird. Und schneller.Wie kann ich Code-Duplizierung bei der Konfiguration von Widgets vermeiden, die ich mit JavaScript-Objektliteralen erstellt habe?

Ich habe z.B. der folgende Code zum Einrichten einer Kendo UI grid. Ich muss diesen Code genau für zwei Gitter in der gleichen Ansicht wiederholen, mit Ausnahme von einem Parameterunterschied im Objekt transport.read.data. Ich realisiere, dass ich die model und columns Definitionen in geteilte Objekte ausklammern kann, aber ich möchte die gesamte Grid-Konfiguration schließlich teilen. Vielleicht eine jQuery-Erweiterung namens myUserKendoGrid?

$("#availableUsersGrid").kendoGrid({ 
     dataSource: { 
      transport: { 
       read: { 
        url: "/Role/AvailableUsersJson", 
        data: { roleId: $("#Id").val() }, 
        type: "GET" 
       } 
      }, 
      schema: { 
       model: { 
        id: "Id", 
        fields: { 
         Id: { editable: false }, 
         UserName: { editable: false }, 
         EmployeeRefNum: { editable: false }, 
         EmployeeSurname: { editable: false }, 
         EmployeeFullNames: { editable: false } 
        } 
       } 
      } 
     }, 
     columns: [ 
       { field: "UserName", title: "User Name" }, 
       { field: "EmployeeRefNum", title: "Emp. No." }, 
       { field: "EmployeeSurname", title: "Surname" }, 
       { field: "EmployeeFullNames", title: "Name" } 
     ], 
     selectable: "multiple, row", 
     editable: false, 
     sortable: true, 
     pageable: true 
    }); 

Antwort

0

Sie könnten einfach klonen Sie Ihre Konfiguration über die .extend() Methode von jQuery. Zum Beispiel:

var superDuperAwesomeConfiguration = { 
    // moar configs go here, yo! 
}; 

var copyCatConfigs = jQuery.extend(true, {}, superDuperAwesomeConfiguration); 

// modify copyCatConfigs properties here 

$("#gridA").kendoGrid(superDuperAwesomeConfiguration); 
$("#gridB").kendoGrid(copyCatConfigs); 
+0

Danke John. Meine Docs für jQuery geben mir die Signatur 'jQuery.extend ([deep], target, object1, [objectN]): Object' für eine tiefe Ausdehnung, was ich vermute, dass Sie beabsichtigen, basierend darauf, dass Ihr erster Parameter' true' ist . Sicher ist 'superDuperAwesomeConfiguration' das Ziel und somit der zweite Parameter? Entschuldigung, mein jQuery/Freitag stoopidz. – ProfK