5

当谈到剑道的绑定行为时,似乎有一个相当奇特的设计决定。

我正在尝试将可为空的值绑定到下拉列表。如果(远程来源的)值为 null,则 Kendo 将生成对象以绑定到该值,例如,使用下拉列表的 data-value-field/value。这使得保存修改后的视图模型非常不可靠,因为现在将传输整个对象而不是简单的数据类型。

示例: Schedule.WeekNumbernull. 从下拉菜单中选择一个值后

<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"

有没有人对此有很好的解决方案?- 除了在加载时替换视图模型的所有空值,例如:

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);
      }
    });
  }
}
4

2 回答 2

4

有一个 data-value-primitive 属性可以用来实现直接的值绑定。

<select data-role="dropdownlist" name="scheduleWeekOfMonth"
  data-bind="value:WeekNumber" data-value-primitive="true">
    <option value="">Every week</option>
    ...
</select>

这是有关此属性的文档中的链接。此外,还有一个UserVoice 建议

于 2013-08-31T00:48:09.187 回答
0

问题被多次讨论。设置默认值以便绑定时值不为空,或查看以下文章如何创建自定义活页夹。

于 2013-04-17T21:11:30.370 回答