基于与剑道绑定变量的值设置标记属性(Set tag attribute based on varia

2019-10-18 00:35发布

  1. 创建这必将一个剑术MVVM输入元件的变量列表。
  2. 我有一个剑道验证运行在我所有的输入元素(这是标准功能),检查是否输入是空的。
  3. 在我的MVVM的对象有一个属性IsMandatory,就像这样:

    { 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;
    }
},
...

Answer 1:

这可以被实现为自定义绑定 :

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



文章来源: Set tag attribute based on variable value with kendo binding