//JSON file data[ {"questiontext":"Please enter the first name.","control":{"type":"textbox","label":"First Name"},"answer":"","comment":"This is where the comment goes"}, {"questiontext":"What is the status?","control":{"type":"combobox","label":"Status:","item":[{"itemtext":"Open","itemvalue":"OP"},{"itemtext":"Canceled","itemvalue":"CA"},{"itemtext":"Closed","itemvalue":"CL"},{"itemtext":"Complete","itemvalue":"CO"}]},"answer":"","comment":""}, {"questiontext":"What is the status?","control":{"type":"radiobutton","label":"Status:","item":[{"itemtext":"Open","itemvalue":"OP"},{"itemtext":"Canceled","itemvalue":"CO"},{"itemtext":"Closed","itemvalue":"CL"},{"itemtext":"Complete","itemvalue":"CO"}]},"answer":"","comment":""}, {"questiontext":"What was the date of the incident?","control":{"type":"datetime","mask":"datetime","label":"Date:"},"answer":"","comment":""}, {"questiontext":"What was the date of the incident?","control":{"type":"datetime","mask":"dateonly","label":"Date:"},"answer":"","comment":""}, {"questiontext":"What was the date of the incident?","control":{"type":"datetime","mask":"timeonly","label":"Time:"},"answer":"","comment":""}]<!DOCTYPE html><html><head> <title>Editing</title> <link href="../../iqaListTest/content/kendo/2012.3.1114/examples-offline.css" rel="stylesheet"> <link href="../../../iqaListTest/content/kendo/2012.3.1114/kendo.common.min.css" rel="stylesheet"> <link href="../../../iqaListTest/content/kendo/2012.3.1114/kendo.default.min.css" rel="stylesheet"> <script src="../../../iqaListTest/scripts/kendo/2012.3.1114/jquery.min.js"></script> <script src="../../../iqaListTest/scripts/kendo/2012.3.1114/kendo.web.min.js"></script> <script src="../../iqaListTest/scripts/kendo/2012.3.1114/console.js"></script></head><body> <a class="offline-button" href="../index.html">Back</a> <div id="example" class="k-content"> <div class="k-toolbar k-grid-toolbar"> <a class="k-button k-button-icontext k-add-button" href="#"><span class="k-icon k-add"></span>Add new record</a> </div> <div class="listview-holder"> <div id="listView"></div> </div> <!--<div id="pager" class="k-pager-wrap"> </div>--> <script type="text/x-kendo-tmpl" id="template"> <div class="iqa-view"> <dl> <dt>Question</dt> <dd>${questiontext}</dd> <dt>${control.label}</dt> <dd>${answer}</dd> <dt>Comment</dt> <dd>${comment}</dd> </dl> <div class="edit-buttons"> <a class="k-button k-button-icontext k-edit-button" href="\\#"><span class="k-icon k-edit"></span>Edit</a> <a class="k-button k-button-icontext k-delete-button" href="\\#"><span class="k-icon k-delete"></span>Delete</a> </div> </div> </script> <script type="text/x-kendo-tmpl" id="editTemplate"> <div class="iqa-view"> <dl> <dt>Question</dt> <dd>${questiontext}</dd> <dt>${control.label}</dt> <dd> #if (control.type == 'textbox') { # <input type="text" data-bind="value:answer" name="answer" required="required" validationMessage="required" /> <span data-for="answer" class="k-invalid-msg"></span> # } else if (control.type == 'combobox') { # <select data-role="combobox" data-text-field="itemtext" data-value-field="itemvalue" data-bind="source:control.item, value:answer"></select> # } else if (control.type == 'datetime' && control.mask == 'datetime') { # <input data-role="datetimepicker" data-bind="value:answer" /> # } else if (control.type == 'datetime' && control.mask == 'dateonly') { # <input data-role="datepicker" data-bind="value:answer" /> # } else if (control.type == 'datetime' && control.mask == 'timeonly') { # <input data-role="timepicker" data-bind="value:answer" /> # } # </dd> <dt>Comment</dt> <dd>${comment}</dd> </dl> <div class="edit-buttons"> <a class="k-button k-button-icontext k-update-button" href="\\#"><span class="k-icon k-update"></span>Save</a> <a class="k-button k-button-icontext k-cancel-button" href="\\#"><span class="k-icon k-cancel"></span>Cancel</a> </div> </div> </script> <script> $(document).ready(function () { var dataSource = new kendo.data.DataSource({ transport: { read: { url: "iqaData.txt", dataType: "json" } } }); var listView = $("#listView").kendoListView({ dataSource: dataSource, template: kendo.template($("#template").html()), selectable: "single", editTemplate: kendo.template($("#editTemplate").html()) }).data("kendoListView"); $(".k-add-button").click(function (e) { listView.add(); e.preventDefault(); }); }); </script> <style scoped> .iqa-view { float: left; width: 650px; margin: 5px; padding: 3px; -moz-box-shadow: inset 0 0 50px rgba(0,0,0,0.1); -webkit-box-shadow: inset 0 0 50px rgba(0,0,0,0.1); box-shadow: inset 0 0 50px rgba(0,0,0,0.1); border-top: 1px solid rgba(0,0,0,0.1); -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; } .listview-holder { width: 700px; margin: 0 auto; padding: 0; border: 0; border: 1px solid rgba(0,0,0,0.1); height: 400px; overflow: auto; } .iqa-view dl { margin: 10px 0; padding: 0; min-width: 0; } .iqa-view dt, dd { float: left; margin: 0; padding: 0; height: 30px; line-height: 30px; } .iqa-view dt { clear: left; padding: 0 5px 0 15px; text-align: right; opacity: 0.6; width: 100px; } .k-listview { border: 0; padding: 0; min-width: 0; } .k-listview:after, .iqa-view dl:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .edit-buttons { text-align: right; padding: 5px; min-width: 100px; border-top: 1px solid rgba(0,0,0,0.1); -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; } .k-toolbar, #listView { width: 660px; margin: 0 auto; -webkit-border-radius: 11px; -moz-border-radius: 11px; border-radius: 11px; } span.k-invalid-msg { position: absolute; margin-left: 160px; margin-top: -26px; } </style></div></body></html>[Required]
[Display(Name = "Effective Date")]
[DataType(DataType.Date)]
public DateTime EffectiveDate { get; set; }
Editor Template:
@model DateTime?
@(Html.Kendo().DatePickerFor(m => m)
.Name("datePicker")
<div id="modalview-post-details" data-role="modalview" style="width: 100%; height: 70%;" data-modal="false"></div>Every node causes a call to _initChildren even if it doesn't have children.
If i have one root node with 1000 children (leafs w/o children) the call to _initChildren is made 1001 times. If you use load on demand the call is only done for the nodes you expand, and nodes without children can't be expanded. It is obvious that the information on wheter the node has children or not is available before the _initChildren is called. For larges datasources (~1000 nodes) this often causes the browser to halt (alerting ~A script is causing the page to run slowly..).
By changing kendo.data.js (start line 2832 in 2012.2.913) from:
load: function() { var that = this, options = {}; that._initChildren(); if (!that._loaded || that.hasChildren) { options[that.idField || "id"] = that.id; if (!that._loaded) { that.children._data = undefined; } that.children.one(CHANGE, function() { that._loaded = true; }) ._query(options); }},To:
load: function() { var that = this, options = {}; if (that.hasChildren) { that._initChildren(); options[that.idField || "id"] = that.id; if (!that._loaded) { that.children._data = undefined; } that.children.one(CHANGE, function() { that._loaded = true; }) ._query(options); }},The loading time is cut by ~80% (one typical example would be from 30s to 7s) in my average trees (a lot more in the example given above).
Though I don't now it the above code change can have any unforseen consequences, or if there is a better way to accomplish a similar effect.
Would love to hear you thoughts on this.
that._ScrollView.duration = 1;that._ScrollView.scrollTo(activePage);that._ScrollView.duration = 300;