2013-04-11 67 views
1
  1. 我创建了绑定到kendo MVVM的输入元素的变量列表。
  2. 我有一个kendo验证运行在我所有的输入元素上(这是标准功能),检查输入是否为空。
  3. 在我的MVVM的对象有一个属性IsMandatory,就像这样:使用kendo绑定基于变量值设置标签属性

    { Name: "test", ID: 12, ... , IsMandatory: false }

  4. 验证不能尝试验证与假的IsMandatory值的元素。我怎样才能做到这一点?

我知道可以结合属性MVVM这样的值:

<input data-bind="attr: { name: Name }" /> 

这导致实际的输出这样的对象上方:

<input name="test" /> 

然而,required用于标准需求验证的属性是无价值的,就像这样。

<input name="test" required /> 

所以基本上我需要的,如果在我的MVVM对象的IsMandatory属性设置为true,并没有按规定的属性,如果它被设置为false,以创建具有所需属性的元素。

{ Name: "test1", ID: 1, ... , IsMandatory: true } 
{ Name: "test2", ID: 2, ... , IsMandatory: false } 
{ Name: "test3", ID: 3, ... , IsMandatory: true } 

<input name="test1" required /> 
<input name="test2" /> 
<input name="test3" required /> 

有没有一个优雅的解决方案来解决这个问题?除了在每个元素的创建周围添加if-else。或者在我的验证中有排除/包含元素的不同解决方案?

我可以想象的一个选择是创建一个自定义的必需验证,检查输入的IsMandatory属性是否设置为true,然后才验证该元素。但是,我无法找到任何可能性来获取当前元素的MVVM对象。

... 
validation: { 
    required: function (input) { 
     var observable = // Get the kendo observable from input here !!!!! 
     if (observable.IsMandatory) { 
      return input.val() != ""; 
     } 
     return true; 
    } 
}, 
... 

回答

1

这可以被实现为custom binding

kendo.data.binders.required = kendo.data.Binder.extend({ 
    refresh: function() { 
    var required = this.bindings.required.get(); 
    if (required) { 
     this.element.setAttribute("required", "required"); 
    } else { 
     this.element.removeAttribute("required"); 
    } 
    } 
}); 

这里有一个现场演示:http://jsbin.com/atozib/1/edit

+0

此设置所需的属性要求= “必需的”。 但是,阅读有关没有价值的属性我已经意识到,如果你设置一个值,并且此值看起来是什么并不重要。所以,你的答案确实解决了我的问题。非常感谢。 – 2013-04-11 11:53:46

+0

我意识到这只适用于某些输入。当我尝试将此绑定应用于kendo组合框时,我收到以下消息: “ComboBox小部件不支持所需的绑定” – 2013-04-11 14:56:07

+0

是的,此活页夹仅适用于HTML元素,而不适用于小部件。您也可以使它适用于小部件 - 请检查我在答案中提供的文档链接。 – 2013-04-11 15:42:38