【问题标题】:Kendo MVVM binding on null values binds as object空值上的 Kendo MVVM 绑定绑定为对象
【发布时间】:2013-04-09 01:59:28
【问题描述】:

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

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

示例: Schedule.WeekNumbernull。从 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"

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

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

【问题讨论】:

    标签: data-binding mvvm kendo-ui


    【解决方案1】:

    有一个 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

    【讨论】:

    • 我相信这个属性是在 2013 年第二季度发布的 Kendo UI 中添加的。
    • 几个月后,我以这种方式初始化大多数下拉列表: $("#typeID").attr('data-value-primitive', 'true').kendoDropDownList();
    • valuePrimitive 属性记录在这里:docs.telerik.com/kendo-ui/api/javascript/ui/…
    • 对于 MVC 包装器,添加 .HtmlAttributes(new { data_value_primitive = "true" })
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2016-05-03
      相关资源
      最近更新 更多