2013-04-11 86 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

相關問題