2015-05-15 2 views
1

У нас есть планировщик Kendo, где мы объявляем категории. В модели событий у нас есть поле categories, представляющее массив строк. В декларации планировщика мы также имеем ресурсы, такие как это:Kendo Scheduler multiselect issue

resources: [{ 
    field: "categories", 
    dataSource: [{ 
    text: "", 
    value: "red", 
    color: "#FF0000" 
    }, { 
    text: "", 
    value: "green", 
    color: "#00FF00" 
    }, { 
    text: "blue", 
    value: "blue", 
    color: "#0000FF" 
    }], 
    multiple: true, 
    title: "Category" 
}], 

В шаблоне редактирования планировщика мы

<label for="categories">Categories</label> 
<select data-bind="value:categories" name="categories" id="categories" multiple="multiple" data-placeholder="Select categories..."> 
</select> 

и планировщик edit(e) обратного вызова

var categ_editor = $("#categories").kendoMultiSelect({ 
    dataTextField: "value", 
    dataValueField: "value", 
    itemTemplate: '<div class="k-state-default" style=\"width:100%; height:16px;\" ><div style=\"background-color:#:data.color#; width:14px; height:14px;display:inline-block;\" ></div>&nbsp;#: data.value #</div>', 
    tagTemplate: '<span class="k-state-default"><b style=\"background-color:#:data.color#;\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>&nbsp;#: data.value #</span>', 

    dataSource: { 
    data: [{ 
     text: "", 
     value: "red", 
     color: "#FF0000" 
    }, { 
     text: "", 
     value: "green", 
     color: "#00FF00" 
    }, { 
     text: "", 
     value: "blue", 
     color: "#0000FF" 
    }] 
    } 
}).data("kendoMultiSelect"); 

Таким образом, планировщик показывать все хорошо, и обрабатывать несколько значений правильно. Но когда я редактирования категории, планировщик отправляет весь Category объект (с text и color) как этот

"Categories": [{ 
    "text": "", 
    "value": "red", 
    "color": "#FF0000" 
}, { 
    "text": "", 
    "value": "green", 
    "color": "#00FF00" 
}] 

но правильно JSON должен быть "Categories":["red","green"]"

Как исправить это поведение?

+0

У SO есть форматирование кода? –

+1

Arman, SO не разрешает форматирование кода, насколько я знаю. Например, вы можете отформатировать его с помощью [jsFiddle] (http://jsfiddle.net/) или [codePen] (http://codepen.io/pen/). Это усилия, которые в идеале должны делать айки, чтобы ответчики могли легко понять проблему. – chiapa

ответ

2

Ваш многосегментный источник данных содержит коллекцию объектов, поэтому значение, которое вы получаете из multiselect, будет в форме объекта. Это связано с тем, что свойство valuePrimitive, по умолчанию оно установлено в false, поэтому оно возвращает type данных внутри своего источника данных, который в этом случае равен object вместо примитивного значения.

Вы должны изменить его на true, чтобы он возвращал только его значение не всему объекту. Ваше определение MultiSelect должно быть так:

var categ_editor = $("#categories").kendoMultiSelect({ 
    valuePrimitive: true, // this prop you should add 
    dataTextField: "value", 
    dataValueField: "value", 
}).data("kendoMultiSelect"); 

Смотрите это dojo знать разницу.

+0

Это работает! Спасибо, приятель! Я потерял неделю по этой проблеме. –

+0

Без проблем bro :) –