Approved
Last Updated: 04 Nov 2019 15:41 by ADMIN

Dear support team

 

I have an interesting phenomenon. We are using a MultiSelect widget with remote data binding. In theory, the data looks like this:

Key: 099

Value: Test1

Key: 100

Value: Test2

etc.

I can select all values just fine and they are posted to the form on the receiving end. When reloading the form, we pre-populate the selected items, by calling ->setValue() with an Array of strings: 099,100.

However, the generated Javascript code for the multiselect will change that to [99,100]. So the 099 will not get selected when shown.

Is this something I can avoid? Do I need to specify anything special for the Key column (so far I have only specified the name of the field and marked it as an IDcolumn).

 

Here is the generated javascript code, as you can see, the value is set to 99, but gets passed in the PHP array as '099':

 <select id="berufsgruppeMultiSelect[]" name="berufsgruppeMultiSelect[]" style="width:500px;"></select><script>jQuery(function(){jQuery("#berufsgruppeMultiSelect\\[\\]").kendoMultiSelect({"dataSource":{"type":"odata-v4","serverFiltering":true,"serverSorting":true,"serverPaging":true,"transport":{"read":{"url":function(data) {return "http://aiislab1.bsl.ch.almanid.com:8180/iswebservice/OData4Service.svc/Attributes('687')/CTVRecords?lang=en&$select=V_Long&SESSIONID=" + encodeURIComponent(cookieSessionID) + "";},"contentType":"application\/json;odata.metadata=minimal","dataType":"json","type":"GET"},"parameterMap":function(options, type) {
if (type === 'read') {
if (options.filter) {
for(var index in options.filter.filters) {
var Filter = options.filter.filters[index];
Filter.value = boolean2string(Filter.value);

if ($.isArray(Filter.filters)) {
for(var arrayIndex in Filter.filters) {
var ArrayFilter = Filter.filters[arrayIndex];
ArrayFilter.field = 'tolower(' + ArrayFilter.field + ')';
ArrayFilter.value = ArrayFilter.value.toLowerCase();
}
} else {
Filter.field = 'tolower(' + Filter.field + ')';
Filter.value = Filter.value.toLowerCase();
}
}
} else {
                    options.filter = {logic: 'and', filters: [{field: 'tolower(Language)', operator: 'contains', value: 'en'}]};
                }
if (options.sort) {
var sortCount = 0;
for(var index in options.sort) {
var Sorter = options.sort[index];
sortCount = 1;

}
}
if (typeof sortCount === 'undefined' || sortCount === 0) {
options.sort = [{field: 'V_Long', dir: 'asc'}];
}
}
return kendo.data.transports['odata-v4'].parameterMap(options, type);}
},"schema":{"model":{"fields":[{"field":"Key"},{"field":"V_Long"}],"id":"Key"}}},"dataTextField":"V_Long","dataValueField":"Key","value":[99],"valuePrimitive":true,"filtering":function (e) {
            if (e.filter) {
                var value = e.filter.value
                var newFilter = {
                    logic: 'and',
                    filters: [
                        { field: 'tolower(Language)', operator: 'contains', value: 'en' },
                        {
                            logic: 'or',
                            filters: [
                                { field: 'id', operator: 'contains', value: value },
                                { field: 'V_Long', operator: 'contains', value: value }
                            ]
                        }
                    ]
                }
                e.sender.dataSource.filter(newFilter)
                e.preventDefault()
            }
            e.preventDefault()
        },"placeholder":"alle Berufsgruppen","itemTemplate":"#: id# (#: V_Long#)","tagTemplate":"#: id# (#: V_Long#)"});});</script>

 

Thank you for your advice.

Yours,

Ronny