2015-06-30 22 views
3

我對knockoutjs相當新,所以這是存在的很好的可能性,我只是沒有尋找正確的事情。如何使一個多選擇需要但不是空

我有一個<select>元素可以有多個選擇。在加載時,我不想選擇任何東西,但我不想在用戶執行任何操作之前觸發驗證。如果選擇了某些東西並取消選中,或者有一個「無」按鈕清空所選數組,則可以啓動驗證。這可以。我<select>看起來是這樣的:

<select multiple data-bind="options: PossibleValues, 
          selectedOptions: SelectedValues, 
          validationCore: SelectedValues"> 
</select> 

就像我說的,如果我明確地清空SelectedValues,然後我讓我的客戶端驗證消息。如果我沒有,那麼isValid()返回true,我沒有看到任何消息。

那麼,如何提交多選需要和失敗驗證,如果它是空的,但沒有突出顯示它是一個負載問題?

編輯

我試圖簡化我的問題我的例子,但基本上我有一個視圖模型,其中有一個孩子視圖模型,並發現孩子有一個對象,它是一個ko.observable(),也是一個視圖模型。然後,得到它,這是一個子視圖,它是ViewModels的ko.observableArray()。這個最低級別是我試圖看到驗證錯誤的地方(添加{ deep: true }只會喊太深)。問題在於最低級別 - 我們稱之爲greatgrandchildVM - 在我呼叫isValid()時返回true,儘管顯然無效。通過greatgrandchildVM的陣列循環,我可以看到errors()中有值。

爲什麼這些不會冒泡並把isValid()假冒?顯然,我可以在一起循環迭代我的greatgrandchildVM數組,並自己做,但我猜測有一個淘汰賽的方式來做到這一點,我只是太新,不知道它。

+0

你能不能把小提琴在一起呢? – Luis

回答

0

這是選擇元素的一個非常常見的問題。

設置好後SelectedValues空做到這一點:

SelectedValues.isModified(false); 

這應該修復它

+0

事情是,我不想明確清空'SelectedValues'。我希望它知道它是空的,不應該沒有'SelectedValues([]);'' – ethorn10

0

嘗試使用this syncModified extender

傳播強制驗證和重置

如果具有複雜的數據結構,與深使用ko.validation.group 的:真正的往往是一個重大的痛苦。另一方面,複雜的數據結構可能還包括需要驗證的數組和對象。

注意:這是一個擴展器,而不是驗證規則。

0

使用「optionsCaption」結合

<select multiple data-bind="options: PossibleValues, 
         selectedOptions: SelectedValues, 
         validationCore: SelectedValues, 
         optionsCaption: 'emptyValueText'"> 
</select> 

這給出了添加在選擇任何值,其顯示emptyValueText空值。

如果沒有指定選項,淘汰賽會從您的 PossibleValues中選擇第一個,然後繼續驗證選擇。

的optionsCaption也可以是可觀察到的,或者只是一個空字符串

希望這有助於

相關問題