2016-06-10 13 views
0

Ich habe das folgende Kendo UI Grid-Setup mit einem berechneten Feld im Modell.Warum zeigt das modellberechnete Feld meines Kendo Grids den Code der Funktion an?

Wenn er ausgeführt wird, dieses Gitter richtig lädt, sondern zeigt den aktuellen Quellcode der cost Funktion des Modells in jeder Zelle statt dem berechneten Wert erwartet:

enter image description here

Wenn ich auf einer einzelnen Zelle klicken, es zeigt tatsächlich den berechneten Wert:

enter image description here

Das Aggregat Fußzeilenzeile den gleichen Code immer zeigen, ich ge nicht in der Lage bin t es, um einen Wert zu drucken.

Ich habe ein laufendes Beispiel at Kendo's dojo gepostet.

<div id="item_65_lineItems" data-field-name="item[65][lineItems]"></div> 
<script> 
jQuery(function(){ 
    var json = { 
    "columns": [{ 
     "field": "line_no", 
     "title": "Line No.", 
     "width": "15%" 
    }, { 
     "field": "description", 
     "title": "Description", 
     "width": "60%" 
    }, { 
     "field": "qty", 
     "title": "Qty", 
     "width": "10%", 
     "footerTemplate": "Sum: #=sum#" 
    }, { 
     "field": "cost", 
     "title": "Cost", 
     "width": "15%", 
     "footerTemplate": "Sum: #=sum#" 
    }], 
    "dataSource": { 
     "data": [{ 
      "line_no": 1, 
      "description": "Test line item", 
      "qty": 15 
     }, { 
      "line_no": 1.1, 
      "description": "test 1", 
      "qty": 12 
     }, { 
      "line_no": 2, 
      "description": "test 2", 
      "qty": 16 
     }, { 
      "line_no": 3, 
      "description": "test 3", 
      "qty": 15 
     }, { 
      "line_no": 4, 
      "description": "test 4", 
      "qty": 12 
     }, { 
      "qty": 12, 
      "line_no": 5, 
      "description": "test 5" 
     }], 
     "aggregate": [{ 
      "field": "qty", 
      "aggregate": "sum" 
     }, { 
      "field": "cost", 
      "aggregate": "sum" 
     }] 
    }, 
    "editable": { 
     "createAt": "bottom" 
    }, 
    "pageable": false, 
    "toolbar": [{ 
     "name": "create" 
    }] 
}; 
    json.dataSource.schema = { 

     model: { 
      cost: function() { 
       return this.qty * 100; 
      } 
     } 
    }; 
    //json.dataSource = new kendo.data.DataSource(json.dataSource); 
    console.log(json); 
    jQuery("#item_65_lineItems").kendoGrid(json); 
}); 
</script> 

Antwort

1

Sie eine Vorlage, die Funktion auszuführen verwenden können:

{ 
    "field": "cost", 
    "title": "Cost", 
    "width": "15%", 
    "footerTemplate": "Sum: #=sumCosts()#", 
    "template": "#=cost()#"  

} 

die Fußzeile scheint schwieriger zu sein, aber man kann eine andere Funktion aufrufen, um den Wert zu erhalten:

var sumCosts = function() { 
    var ds = $("#item_65_lineItems").data("kendoGrid").dataSource; 
    var aggregates = ds.aggregates(); 

    return aggregates.qty.sum * 100; 
}; 

here's a sample