Telerik Forums
Kendo UI for jQuery Forum
5 answers
1.3K+ views
I have a scenario with grid within grid implemented using the detailInit method. Here when user makes edit, i  do some calculations that will change the data in the both parent and child. and then to refresh data, i will call the datasource.read to render data. this works and the data is displayed, however any detail grid which are expanded will be collapsed, is there any way i can prevent this from happening.

Regards,
Pramod
SyneITY
Atanas Korchev
Telerik team
 answered on 26 Nov 2013
3 answers
209 views
This is a very difficult issue to explain so I'm going to give you some instructions on how to replicate it and see it for yourself.

1. Go to the Kendo menu demonstration page demonstrating the possible directions.
2. Hover over the "Girl's" menu.
3. Hover over any sub-menu.

When you do this you should see that all the arrows seem to "bounce" when the sub-menu opens.  If you move the mouse up and down the "Girl's" sub-menu items you can clearly see all the arrows within that menu bounce.  This does not happen in any other menu (except when it is the third or greater menu option along and I've checked the CSS, it does not appear to be that which is causing this; I suspect it is a scripting issue.

This also happens on the Orientation demo page, and it even happens with you change the orientation to vertical.

I've attached a screencast in case it is just my browser, but I'm using the latest version of Chrome (v. 31.0.1650.48 m).
Dimo
Telerik team
 answered on 26 Nov 2013
2 answers
182 views

ListView Definition


 var carriers = $("#carrierList").kendoListView({
            dataSource: t94StragglerCarriers,
            selectable: true,
            pageable : true ,
            change: onChange,
            dataBound: onDataBound,
            dataBinding : onDataBinding ,
            template : kendo.template($("#carrierTemplate").html())
        }).data("kendoListView");

Template Definition

<script type="text/x-kendo-tmpl" id="carrierTemplate">
    <div id='carrierListVal' class='k-textbox'>#:val#</div>    
    <br/>
</script>

DataSource Definition

 var t94StragglerCarriers = new kendo.data.DataSource({
            transport: {
                read: {
                    url: "/MenuTrain/T94StragglerCarriers",                    
                    dataType: "json"                   
                },
                schema: {
                    model: {
                        id: "id",                        
                        fields: {
                            id: {type : "string"} ,
                            val: {type : "string"}
                        }                        
                    }
                },               
                pageSize: 5,
                serverPaging : true 
            }
        });

I've tried several variations for the datasource. From not specifying the schema to just specifying the id.

OnChange Event Handler Definition

function onChange() {
            var listView = $("#carrierList").data("kendoListView");
            var index = listView.select().index();
            var item = listView.dataSource.view()[index];
            console.log("Item " + index + " selected. Text = " + item.id);
        }

Here is the json string returned from my controller's action method: 

[{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"CHTT"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"CMO "},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"CTCX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"DBUX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"GATX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"MWCX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"NDYX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"PLMX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"TAEX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"TCIX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"TEIX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"TILX"},{"id":"10eac72a-d62d-434f-8505-4869cdb27b04","val":"UP  "},{"id":"ffbcdb6c-4d3a-45f6-8ef6-ada5f28ba44b","val":"MDXx"}]

The listview renders correctly. But it's as if the listview's select().index() methods are treating each field as an item. For example , the first object's id field is index 0, the first object's val field is index 1, and so on.


What am i doing wrong here?

Matt Miller
Top achievements
Rank 1
 answered on 26 Nov 2013
3 answers
198 views
When i try to step through an event handler for my listview's change event, Firefox locks up. Can not click on any of the debugger menu items. Can't switch back to the console window. Browser becomes completely unresponsive. I am logging to the console window from my event handler, and no errors are mentioned.

I know this has to be something silly on my part, just wondered if any one else has experienced this problem. 

Here is the definition of my ListView : 

var carriers = $("#carrierList").kendoListView({
            selectable: true,
            pageable : true ,
            change: onChange,
            dataBound : onDataBound ,
            dataSource: t94StragglerCarriers,                       
            template : kendo.template($("#carrierTemplate").html())
        }).data("kendoListView");
Here is the event handler : 
function onChange() {
           var listView = $("#carrierList").data("kendoListView");
           var index = listView.select().index();
           var item = listView.dataSource.view()[index];
           console.log("Item " + index + " selected. Text = " + item.val);
       }

Again , this only happens when i try to debug this event handler in firefox.

Thanks in advance.


Alexander Valchev
Telerik team
 answered on 26 Nov 2013
1 answer
89 views
I am trying to set the series name from another field in the model.

For example, my current code is:
            series.Column(model => model.CallbackFrequency1).Name("FREQ 1").Color("#003366");
            series.Column(model => model.CallbackFrequency2).Name("FREQ 2").Color("#999999");
            series.Column(model => model.CallbackFrequency3).Name("FREQ 3").Color("#00ac36");
            series.Column(model => model.CallbackFrequency4).Name("FREQ 4").Color("#e8b700");


The name of the series depends upon a date range selected by the user.  I am returning the name I want to use in the model, but I can not figure out how to dynamically populate the series column name. 

Is this possible?
Daniel
Telerik team
 answered on 26 Nov 2013
1 answer
107 views
I need to be able to 'map' some certain data incoming to an existing javascript object that called upon the appropriate code of my MVVM framework, so I took my hand at trying it myself and I thought I had done a pretty good job, but I am running into a problem.

Edit

I have also created a jsBin to show this behavior exists even without my mapping. This is something that is occuring in the `set` function of kendo, and I want to find a way to stop it

jsBin


Basically, I draw a "mapping" like this, using Kendo's model system.
var Model = kendo.data.Model.define({
   Id: "Id",
   fields: {
       Id: {
           type: "string",
       },
       Name: {
           type: "string",
       },
       Mutations: [],
       Tags: []
   },
   mapping: {
       Tags: {
           children: function (data) {
               return $.extend(data, {
                   onRemove: function (e) {
                       // execute code
                   }
               });
           }
       },
       Mutations: {
           children: function (data) {
               return $.extend(data, {
                   Label: null,
                   onRemove: function (e) {
                       // execute code
                   },
                   onEdit: function (e) {
                       // execute code
                   },
                   onSave: function (e) {
                       // execute code
                   }
               });
           }
       }
   }
});

I know that on the outside, this looks a bit unnecessary, but it works well for me and fits my thinking process. I'm open to suggestions for other ways to do it, but ...

Anyway, the purpose of this is to "map" the `onRemove` functions to the `Tags` array when it comes in from the server, and to map the `onRemove, onEdit, onSave` functions to each child in the `Mutations` array. I can do this 'after' they are loaded, but I wanted to try this approach to learn more about javascript.

So then, this is my mapping code.
kendo.data.ObservableObject.prototype.fromJSON = function (source, mapping) {
    var name,
        value,
        observable = this;
 
    // if there is mapping given, then pass it through that first
    if (mapping) {
        source = kendo.mapping(source, mapping);
    }
 
    for (name in source) {
        if (observable.hasOwnProperty(name)) {
            observable.set(name, source[name]);
        }
    }
 
}

This will call the following code, which I felt pretty proud of myself for writing, considering this is my first time trying to do anything like this in javascript.
kendo.mapping = function (source, mapping) {
    var name,
        value;
 
    // if the user provides us a mapping, we can use that to help
    // build the objects appropriately
    for (name in source) {
        if (source.hasOwnProperty(name)) {
            // get the value for this property or item
            value = source[name];
 
            // try to determine if this is an array, or just a
            // normal object. That will greatly dictate our choice of behavior
            if (value instanceof Array) {
 
                // if this is an array, then we will try to check for a
                // key in the mapping schema
                if (mapping[name].children) {
 
                    // if we discover a mapping key for this array, we
                    // will use it to reconstruct the array data
                    for (var i = 0; i < value.length; i++) {
                        source[name][i] = mapping[name].children(value[i]);
                    }
                }
            } else {
                // attempt to match any non array type keys
                if (mapping[name]) {
                    source[name] = mapping[name](value);
                }
            }
        }
    }
    return source;
}

Now for a while, I thought this was awesome. It was working how I wanted, as demonstrated here;
// -------------------------------------------------------------
// create a kendo ui grid to show the existing prototypes
// -------------------------------------------------------------
widgets.grid = $('#grid').kendoGrid({
    dataSource: {
        transport: {
            read: {
                url: "/administrator/data/prototypes",
                dataType: "json",
                type: 'GET'
            }
        },
        schema: {
            total: "total",
            data: "data"
        },
        page: 0,
        pageSize: 15,
        take: 15,
        serverPaging: true,
        serverFiltering: true,
        type: "aspnetmvc-ajax"
    },
    pageable: {
        refresh: true,
        pageSizes: true
    },
    selectable: "row",
    columns: [
        {
            field: "Id",
            width: 25,
            title: "Identity"
        },
        {
            field: "Name",
            width: 40,
            title: "Name"
        }
    ],
    change: function (e) {
        // get the selected row from the grid
        var selected = this.select();
        // get the data from the selected row
        var data = this.dataItem(selected);
        // update the model
        viewModel.fromJSON(data.toJSON(), viewModel.mapping);
    },
}).data("kendoGrid");
So this code goes to my controller and gets a JSON list of all of the relevant items from the database (stored in `RavenDB` as JSON). This returns flat items, which is exactly how I want them in the database (since the functions can't be serialized, obviously). But when I get them into my UI, I want those functions. So in the `change` function, I take the data and pass it through my `fromJSON` function, which accepts the mapping defined in the view model.

This works, it works very well I think. But then when I try to go further and have other bindings on the view model.. .like this..
viewModel.Mutations.bind("change", function (e) {
   // do something else
});
This is really normal kendo code. I attach the `change` event to a function so that it runs whenever that `ObservableArray` changes. This works fine in my other pages where I don't use mapping, but on this one, once the mapping runs, it seems to become 'unbound'. I have found that if I put the `bind` code _after_ the mapping is done, it works.

So I have to assume that what is happening is that the code that does the binding is somehow hidden inside of the `ObservableArray`, and that it gets deleted when it runs the mapping.

Can anyone help me with this?
Alexander Valchev
Telerik team
 answered on 26 Nov 2013
1 answer
178 views
Im trying to figure out a way to handle server side filtering where our controllers return viewmodels rather than the actual entity. Because a viewmodel is being bound to the grid, when ever I sort or filter the field that is being sent back to the controller is the property name from the viewmodel and does not match to the entity. Because of this I can't do a dynamic where clause as the where clause contains the field of the viewmodel (CarName) and not the entity (Name). Somehow I need a way to map the filter for the viewmodel fields back to the entity so that I can filter properly.  

Here are the basic steps:
Call Repository Get IQueryable<Car> Entity
Filter and sort Data (With Dynamic Query)
Convert entity to viewmodel with Automapper
Return viewmodel
-- This represents my entity and view model, both the fields are the same but have slightly different names

public
class Car {
    public string Name { get; set; }
}
 
public class CarViewModel {
    public string CarName { get; set; }
}
Just to point out im using the Kendo UI Web and not the MVC wrappers.

Petur Subev
Telerik team
 answered on 26 Nov 2013
1 answer
382 views
I have a kendo grid that I am pulling data from an API (same site)...  I cannot grid to populate with the data.

Here is an example of the json string...

[{"clientID":8,"memoID":14,"memoTime":"2012-05-09T09:04:00","subject":"Letter","memo":"Sent Letter ","initials":"AA","code":1,"private":false,"sticky":false}, ... and so on ...]

The data has no 'structure name' returned so in the schema section below I am not sure what to put?

Here is the code calling the JSON:   (This is from one of your online examples)
<div id="example" class="k-content">
<div id="grid"></div>
  $(document).ready(function() {
                    var grid = $("#grid").kendoGrid({
                        dataSource: {
                               transport: {
                                read: {
                                    url: "/memo/a/8/b/1",
                                    dataType: "json",
               
                                }
                            },
                            schema: {
                                data: function (response) {
                                    return response.data; 
                                }
                          
                            },
                            pageSize: 20,
                            serverPaging: true,
                            serverSorting: true,
                            serverFiltering: true
                        },
                        toolbar: kendo.template($("#template").html()),
                        height: 430,
                        sortable: true,
                        pageable: true,
                        columns: [
                            { field: "MemoID", title: "MemoID", width: 100 },
                            { field: "Subject", title: "Subject" },
                            { field: "Initials", title: "Initials", width: 100 },
                            { field: "Memo", title: "Memo" }
                        ]
                    });

Atanas Korchev
Telerik team
 answered on 26 Nov 2013
3 answers
384 views
Is it possible to not chart values that are Not A Number?  NaN shows in chart as large value, sample attached.
Alexander Popov
Telerik team
 answered on 26 Nov 2013
1 answer
606 views
Hi,

I am developing a webmail client with angularjs and kendoui, it has two panes left for viewing user folders and right for message display / composition.  For displaying the folders I am using kendoui treeview and when they select a node we display the proper messages for that folder.

Problem: When a user choose a folder, Drafts, then clicks on a message to finish composing that message they are unable to click on the Drafts folder node to navigate back to the Drafts folder gridview.

Code:
var theTree = $("#treeview").kendoTreeView({
    dataSource: folderArray,
    template: $("#foldersTemplate").html(),
    expand: function(e) {
        code for grabbing any sub-folders.
    },
    select : function(e) {
        var treeviewInner = e.sender,
            idFolder = treeviewInner.dataItem(e.node).id;
 
        /* set-up angularjs controller scope */
        window.location.href = "#/folder/" + idFolder;  //navigates to the proper folder gridview when node seleced.
    }
});
The issue I'm seeing is that once a node is selected, whenever you re-click on it, the select code does not fire.

Any thoughts on how to work around this?
Alexander Valchev
Telerik team
 answered on 26 Nov 2013
Narrow your results
Selected tags
Tags
Grid
General Discussions
Charts
Data Source
Scheduler
DropDownList
TreeView
MVVM
Editor
Window
DatePicker
Spreadsheet
Upload
ListView (Mobile)
ComboBox
TabStrip
MultiSelect
AutoComplete
ListView
Menu
Templates
Gantt
Validation
TreeList
Diagram
NumericTextBox
Splitter
PanelBar
Application
Map
Drag and Drop
ToolTip
Calendar
PivotGrid
ScrollView (Mobile)
Toolbar
TabStrip (Mobile)
Slider
Button (Mobile)
SPA
Filter
Drawing API
Drawer (Mobile)
Globalization
LinearGauge
Sortable
ModalView
Hierarchical Data Source
Button
FileManager
MaskedTextBox
View
Form
NavBar
Notification
Switch (Mobile)
SplitView
ListBox
DropDownTree
PDFViewer
Sparkline
ActionSheet
TileLayout
PopOver (Mobile)
TreeMap
ButtonGroup
ColorPicker
Pager
Styling
MultiColumnComboBox
Chat
DateRangePicker
Dialog
Checkbox
Timeline
Drawer
DateInput
ProgressBar
MediaPlayer
ImageEditor
OrgChart
TextBox
Effects
Accessibility
PivotGridV2
ScrollView
BulletChart
Licensing
QRCode
ResponsivePanel
Switch
Wizard
CheckBoxGroup
TextArea
Barcode
Breadcrumb
Collapsible
Localization
MultiViewCalendar
Touch
RadioButton
Stepper
Card
ExpansionPanel
Rating
RadioGroup
Badge
Captcha
Heatmap
AppBar
Loader
Security
Popover
DockManager
FloatingActionButton
TaskBoard
CircularGauge
ColorGradient
ColorPalette
DropDownButton
TimeDurationPicker
ToggleButton
BottomNavigation
Ripple
SkeletonContainer
Avatar
Circular ProgressBar
FlatColorPicker
SplitButton
Signature
Chip
ChipList
VS Code Extension
AIPrompt
PropertyGrid
Sankey
Chart Wizard
OTP Input
SpeechToTextButton
InlineAIPrompt
StockChart
ContextMenu
TimePicker
DateTimePicker
RadialGauge
ArcGauge
+? more
Top users last month
Jay
Top achievements
Rank 3
Bronze
Iron
Iron
yw
Top achievements
Rank 2
Iron
Iron
Stefan
Top achievements
Rank 2
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Bohdan
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Jay
Top achievements
Rank 3
Bronze
Iron
Iron
yw
Top achievements
Rank 2
Iron
Iron
Stefan
Top achievements
Rank 2
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Bohdan
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?