如何进行多重选择但不是空的

时间:2015-06-30 18:37:06

标签: knockout.js knockout-validation

我对knockoutjs来说相当新,因此存在很大的可能性,我只是不寻找合适的东西。

我有一个<select>元素可以有多个选择。在加载时,我不想选择任何内容,但我不想在用户做任何事情之前向用户激活验证。如果选择和取消选择某些内容,或者清空所选数组的“无”按钮,我可以进行验证。这可以。我的<select>看起来像这样:

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

就像我说的,如果我明确清空SelectedValues,那么我会收到客户端验证消息。如果我不这样做,那么isValid()将返回true,我看不到任何消息。

那么,如果它是空的,我怎样才能在提交时进行多项选择和失败验证,但是在加载时不将其突出显示为问题?

修改

我试图为我的问题简化我的示例,但基本上我有一个ViewModel,它有一个子ViewModel,并且该子对象是一个ko.observable(),也是一个ViewModel。然后它得到一个子对象,它是ViewModels的ko.observableArray()。这个最低级别是我试图查看验证错误的地方(添加{ deep: true }只会因为太深而大叫)。问题是最低级别 - 我们称之为greatgrandchildVM - 当我调用isValid()时返回true,尽管非常明显无效。循环遍历greatgrandchildVM的数组允许我看到errors()中包含值。

为什么这些没有冒泡并将isValid()抛向假?显然,我可以通过一个for循环来共同遍历我的greatgrandchildVM数组并自己完成,但是我猜测有一种淘汰方式可以做到这一点而且我还太新,不知道它。 / p>

3 个答案:

答案 0 :(得分:0)

这是选择元素的一个非常常见的问题。

将SelectedValues设置为空后执行以下操作:

SelectedValues.isModified(false);

那应该解决它

答案 1 :(得分:0)

尝试使用this syncModified extender

  

传播强制验证并重置

     

如果拥有复杂的数据结构,则使用ko.validation.group   深沉:真实往往是一个重大的痛苦。另一方面,   复杂的数据结构可能还包括数组和对象   需要验证。

     

注意:这是一个扩展程序,而不是验证规则。

答案 2 :(得分:0)

使用'optionsCaption'绑定

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

这会添加一个空值,当没有选择值时显示emptyValueText

如果没有指定optionsCaption,则淘汰赛只会选择你的第一个 PossibleValues,然后继续验证选择。

optionsCaption也可以是一个可观察的,或者只是一个空字符串

希望这有帮助