使用kendo绑定基于变量值设置标记属性

时间:2013-04-11 09:54:05

标签: kendo-ui validation

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

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

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

  5. 我知道我可以将属性绑定到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 个答案:

答案 0 :(得分:2)

这可以作为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