2015-10-21 108 views
1

我正在爲我的表單實施基因敲除驗證,並且我想只在顯示時才創建字段。根據表單中其他字段的選擇,某些控件可能會被可見性隱藏:hidden或display:none。我如何才能使這些領域只需要顯示?我已經試過這隱藏字段上的Knockout.js驗證

var name = ko.observable().extend({ 
     required: { 
      onlyIf: function() { 
       return ($('#name').is(':visible')); 
      }, 
      message: '*** Required' 
     } 
    }); 

但它似乎沒有工作,我不知道是否應該(你能寫這樣的淘汰賽onlyIf PARAMS定製邏輯?)。

感謝您的任何幫助。

+2

一個方式是你應該設置可見'self.nameVisible = ko.observbale()爲true/FALSE'基於稍後在viewModel中可觀察到,您可以在'.extend'中使用'onlyIf'中的相同observable。動態性保持 –

+0

我想我沒有提供足夠的信息。實際上,根據從頁面加載時從數據庫中提取的信息顯示/隱藏我的字段,以及選擇其他控件。儘管如此,你的評論告訴我如何接近它,我能夠解決。如果你想讓這個答案,我會很樂意選擇它。 – wizloc

+0

想到添加小提琴,然而你卻得到了一個工作。添加爲答案,幫助自己。乾杯 –

回答

2

正如在評論中提到的所有你需要做的是

中聲明視圖模型每觀察到的說self.nameVisible=ko.observbale()設置的值就True/False從任何地方(無論是從數據庫或基於其他控制選擇)。稍後,您應該在驗證中使用self.nameVisible(),即與.extend & onlyIf組合使用(隱藏/顯示元素+動態條件驗證)工作。

HTML:

<input type="text" data-bind="value:name,visible:nameVisible"/> 

視圖模型:

var ViewModel = function() { 
    var self = this; 
    self.nameVisible = ko.observable(true); //Set it dynamically 
    self.name = ko.observable().extend({ 
     required: { 
      message: '*** Required', 
      onlyIf: self.nameVisible 
     } 
    }); 
}; 
ko.applyBindings(new viewModel());