2016-04-27 16 views
2

Ich habe eine ASP.Net MVC-Site mit einem KOGrid in einer meiner Ansichten. Dadurch werden Daten abgerufen, indem ein Ajax-Aufruf an einen Controller gesendet wird, der dann über EF aus SQL Server auswählt. Meine Datentabelle kann unten gesehen werden:KO Grid - wiederholender Wert

enter image description here

ich die folgende Spaltendefinition für meine KO Grid haben:

self.columnDefs = [ 
     { width: 50, field: 'workflowTask_WorkflowTaskId', displayName: 'Id' }, 
     { width: 150, field: 'Timestamp', displayName: 'Timestamp', cellFilter: function (data) { return moment(data).format('DD/MM/YYYY h:mm a') } }, 
     { width: 100, field: 'currentState', displayName: 'Crnt State' }, 
     { width: 500, field: 'note', displayName: 'Notes' }, 
     { width: 100, field: 'previousState', displayName: 'Prev State' }, 
     { width: 100, field: 'currentUser', displayName: 'Crnt User', sortable: false }, 
     { width: 100, field: 'amendedByUser', displayName: 'Amnd By', sortable: false }, 
     { width: 100, field: 'previousUser', displayName: 'Prev User', sortable: false } 
    ]; 

Ich habe folgende Optionen auswählen:

self.gridOptions = { 
     data: self.recs, 
     columnDefs: self.columnDefs, 
     autogenerateColumns: false, 
     showGroupPanel: true, 
     canSelectRows: false, 
     showFilter: true, 
     filterOptions: self.filterOptions, 
     enablePaging: true, 
     pagingOptions: self.pagingOptions, 
     sortInfo: self.sortInfo, 
     rowHeight: 35 
    }; 

I ein beobachtbares Array haben, um die Daten, die im Kogrid angezeigt werden sollen, zu speichern:

self.recs = ko.observableArray([]); 

Dies wird durch die folgende JavaScript-Funktion bevölkert:

self.get = function() { 
     $loadingIndicator.show(); 

     $.ajax({ 
      url: BASE_URL + 'TaskHistory/GetRecords', 
      type: 'get', 
      data: { 
       'page': self.pagingOptions.currentPage(), 
       'pageSize': self.pagingOptions.pageSize(), 
       'filter': self.filterOptions.filterText == undefined ? '' : self.filterOptions.filterText(), 
       'sort': self.sortInfo().column.field + ' ' + self.sortInfo().direction 
      }, 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       self.pagingOptions.totalServerItems(data.RecCount); 

       var recsArray = []; 
       $.each(data.PageOfRecords, function (key, value) { 
        recsArray.push(
        new Task(value.WorkflowTaskHistoryId, 
           value.Timestamp, 
           value.PreviousState, 
           value.CurrentState, 
           value.AmendedByUser, 
           value.Note, 
           value.PreviousUser, 
           value.CurrentUser, 
           value.WorkflowTask_WorkflowTaskId)); 
       }); 
       self.recs(recsArray); 
      } 
     }); 
     $loadingIndicator.hide(); 
    }; 

Wie im folgenden Bildschirm greifen von Chrome Entwickler-Tools zu sehen, diese beobachtbaren korrekt ausgefüllt ist:

enter image description here

Mein Problem ist - wenn angezeigt, sind die angezeigten Datum alle für die aktuelle Maschine Datetime - nicht im Zusammenhang mit den Daten von der Ajax-Aufruf abgerufen, wie unten dargestellt:

enter image description here

Kann jemand bitte sehen, wo ich falsch gelaufen bin?

+0

können Sie sich 'Moment (Daten) .format ('DD/MM/YYYY h: mm a')' im '' cellFilter' Definition für KO Grid' um zu sehen, zu welchem ​​Zeitpunkt Sie erhalten für jede Iteration –

+0

bekomme ich die gleiche Zeit für jede Iteration –

Antwort

2

Sie haben einen Tippfehler in Ihrem Code, in Ihrer Spalte def haben Sie 'Timestamp' mit einer Hauptstadt T, aber Ihre Eigenschaft heißt timestamp.

So ist das Update ganz einfach:

{ width: 150, field: 'timestamp', displayName: 'Timestamp', cellFilter: function (data) { return moment(data).format('DD/MM/YYYY h:mm a') } }, 

Warum das seltsame Verhalten:

  • die KoGrid nicht überprüfen, ob Sie einen gültigen field Namen und in diesem Fall geht es nicht definiert, um die cellFilter Funktion als der data Parameter
  • Wenn Sie moment Funktion ohne ein gültiges Datum aufrufen, wird standardmäßig die aktuelle Zeit, das ist, warum alle Ihre Spalten sho w gleichzeitig
+0

Danke nochmal @nemesv und danke für die Erklärung, warum das seltsame Verhalten. Nur wegen Ihrer Hilfe habe ich mit Kogrid (seit fast nichts über Javascript) beharrt und jetzt hat meine Website viel weniger Code zu pflegen als wenn ich alle Markup in Razor Ansichten hatte. –