1
  1. 我创建了一个绑定到 kendo MVVM 的输入元素的变量列表。
  2. 我对所有输入元素进行了剑道验证(这是标准功能),检查输入是否为空。
  3. 我的 MVVM 中的对象有一个属性 IsMandatory,如下所示:

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

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

我知道我可以像这样将属性绑定到 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;
    }
},
...
4

1 回答 1

2

这可以实现为自定义绑定

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

于 2013-04-11T11:40:45.263 回答