当前位置: 首页 > 知识库问答 >
问题:

空值上的Kendo MVVM绑定绑定为对象

孔建柏
2023-03-14

对于剑道中的绑定行为,似乎有一个相当奇特的设计决策。

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

示例:Schedule。周数null。从下拉列表中选择值后,如

<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:"每月的第一周(1.-7.)",值:"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);
      }
    });
  }
}

共有2个答案

竺捷
2023-03-14

这个问题被讨论了多次。设置默认值,使其在绑定时不为空,或者检查下面的文章如何创建自定义绑定器。

岳硕
2023-03-14

有一个数据值原语属性可用于实现直接的值绑定。

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

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

 类似资料:
  • 对于单选按钮,复选框及选择框的选项,v-model绑定的值通常是静态字符串 (对于复选框也可以是布尔值): <!-- 当选中时,`picked` 为字符串 "a" --> <input type="radio" v-model="picked" value="a"> <!-- `toggle` 为 true 或 false --> <input type="checkbox" v-model=

  • 我正在尝试将文本字段绑定到对象。我做了一些研究,找到了这个答案。 然后,您可以像这样绑定街道地址: 我将Street实例化为什么值(在最后一行代码中)? 以上是我找到的例子。我的代码如下——我有一个联系类: 然后我有一个phoneType类: 然后在联系人编辑器中,我试图将phoneType绑定到文本字段: 在联系人编辑器中,包含在**中的行(即 binder.bind(电话类型,联系人.getP

  • 如何将MVVM值绑定到dropdownlist?下面的输入元素运行良好

  • if绑定 if绑定应用在页面元素中,并通过表达式判断是否为元素添加子元素的绑定。if绑定在功能上非常像visible绑定,但在实现上却有很大的不同。visible绑定是为元素添加css样式来控制元素是否显示,if绑定是控制元素的字元素,如果表达式为true,则为元素添加子元素,否则清空子元素。 示例代码: //.W片段 <label> <input type="checkbox" bind-c

  • 英文原文:http://emberjs.com/guides/object-model/bindings/ 一个绑定在两个属性之间建立了一个连接,当其中一个发生改变时,另外一个将自动更新为新的值。绑定连接同一对象中属性,也可以连接不同对象的属性。不同于其他一些也实现了类似绑定的框架,Ember.js中的绑定可以在任意对象中使用,而并不紧紧局限于视图和模型。 建立一个双向的关联最简单的方法是添加一个

  • 诸如本地变量、实例变量、self一类的实体……或者说所有于对象绑定的名称。我们把他们称为绑定(bindings)。 下面内容摘自紫苏的博客,该文对我们的讨论很有意义。 在计算机科学中,“绑定”(Binding)一词是指一个更复杂、更大型的物件的引用的创建。例如当我们编写了一个函数,这个函数名就绑定了该函数本体,我们可以通过函数名来引用并调用该函数,这被称为名称绑定;又如当Ruby通过API去调用了