我正在尝试将可空值绑定到下拉列表。如果(远程源)值为null,则Kendo将生成要绑定到该值的对象,例如,使用下拉列表的data-value-field /值。 这使得保存修改后的viewmodel非常不可靠,因为现在整个对象将被传输而不是简单的数据类型。
实施例:
Schedule.WeekNumber
是null
。从DropDown中选择一个值,如
<select data-role="dropdownlist" name="scheduleWeekOfMonth"
data-bind="value:WeekNumber">
<option value="">Every week</option>
<option value="0">First week of month (1.-7.)</option>
<option value="1">Second week of month (8.-14.)</option>
<option value="2">Third week of month (15.-21.)</option>
<option value="3">Last week of month (22.+)</option>
</select>
然后,值(JSON)为Object {text: "First week of month (1.-7.)", value: "0"}
而不是"0"
有没有人为此得到一个好的解决方案? - 除了在加载时替换viewmodel的所有空值,例如:
function deNull(obj) {
if(obj !== null && typeof obj === "object") {
$.each(obj, function(index, value) {
if(value !== null && typeof value === "object") {
deNull(obj[index]); // we must go deeper (BRRRRRRRAAAAAWWWWRWRRRMRMRMMRMRMMMMM)
}
if(value === null) {
obj[index] = ""; // workaround, this is the "null" equivalent of not being set
//console.log("De-nulled: " + index);
}
});
}
}
答案 0 :(得分:3)
您可以使用data-value-primitive属性来实现直接的值绑定。
<select data-role="dropdownlist" name="scheduleWeekOfMonth"
data-bind="value:WeekNumber" data-value-primitive="true">
<option value="">Every week</option>
...
</select>
以下是in the docs关于此属性的链接。此外,还有UserVoice suggestion。
答案 1 :(得分:0)
多次讨论了问题。设置默认值,使值在绑定时不为null,或者检查following文章如何创建自定义绑定器。