Telerik Forums
Kendo UI for jQuery Forum
2 answers
177 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
193 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
87 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
106 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
174 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
381 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
377 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
603 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
5 answers
417 views
I am using the kendo.dataviz.ui.Chart via the MVC wrapper. I am looking to fire an operation after the chart refreshes...
$("#mychart").data('kendoChart').refresh();
Once the animations, etc, finishes for the refresh, I would like be notified by a promise or chart event.
Daniel
Telerik team
 answered on 26 Nov 2013
1 answer
537 views
Hi,

I have a Grid and want to add a progress bar to row based on a value stored in that row. is this possible?
Thanks,
Chris
Dimiter Madjarov
Telerik team
 answered on 26 Nov 2013
Narrow your results
Selected tags
Tags
+? more
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?