我目前正在使用敲除验证来对表单进行验证:
HTML
<div>
<span>Client</span><input type="text" data-bind="value:Client" />
</div>
<div>
<span>IsMarried</span><input type="checkbox" data-bind="value:IsMarried" />
</div>
<div>
<span>Spouse</span><input type="text" data-bind="value:Spouse" />
</div>
Run Code Online (Sandbox Code Playgroud)
JS
function HouseHold() {
var self = this;
self.Client = ko.observable().extend({required:true});
self.IsMarried = ko.observable();
self.Spouse = ko.observable().extend({required:{ onlyIf:function(){ return self.IsMarried();}}});
}
Run Code Online (Sandbox Code Playgroud)
目前,当选中IsMarried复选框时,配偶字段将不会正确验证,直到输入一个值然后清除.
有没有什么办法可以根据事件修改我的knockout viewmodel上的绑定,或者让验证更快地发生?
我正在使用knockout和映射插件来自动创建我的视图模型.我在视图模型中有一堆金额,我绑定到文本框.当用户更改文本框中的金额时,我想要的是确保他们输入的是一个数字,并且它大于0,如果不是,我想用0替换他们输入的内容.这似乎是它应该很简单......使用自定义绑定或订阅功能.
我正在阅读的关于敲门验证的所有内容都涉及扩展器和读/写计算的observable,或者添加另一个插件(例如jquery验证).对于这种情况,它们似乎都有点过分,并且必须为要验证的每个observable显式声明扩展器/计算的observable.我有很多使用映射插件自动创建的金额,所以这似乎不合理.
任何帮助将不胜感激!
knockout-mapping-plugin knockout-2.0 knockout.js knockout-validation
使用knockout.js(和敲除验证)我有这个:
self.nickname = ko.observable("").extend({
required: true,
minLength: 3
});
Run Code Online (Sandbox Code Playgroud)
和
<input type="text" data-bind="value: nickname" class="short" maxlength="30" />
<div class="formRow rowErrorMsg" data-bind="visible: nickname.isValid() == false"><span class="staticImages staticImagesError"></span> <?php text("Enter a valid username") ?></div>
Run Code Online (Sandbox Code Playgroud)
但问题是,当"昵称"无效时,请在输入控件旁边输入一个文本.带有错误消息的DIV开始可见,然后正常工作.
我需要这样做:
我正在尝试创建一个KnockoutJS视图模型,它模拟客户订单和许多订单商品.我想加载初始数据,并验证数据.
到目前为止,我可以使用knockoutjs.mapping加载数据,验证使用映射添加的数据.
// data to load into viewmodel
var modeldata = {
"OrderID":1,
"ReturnString":null,
"CustomerName":"First Customer",
"OrderDate":"2013-09-16T19:41:40.1639709+01:00",
"OrderItems": [
{"ItemID":0,
"ItemName":"Name_0",
"ItemPrice":0.0,
"_destroy":false
},
{"ItemID":1,
"ItemName":"Name_1",
"ItemPrice":10.0,
"_destroy":false
},
{"ItemID":2,
"ItemName":"Name_2",
"ItemPrice":20.0,
"_destroy":false
}
]
};
// setup defaults for validation
var validationOptions = {
insertMessages: true,
decorateElement: true,
errorElementClass: 'errorCSS',
messagesOnModified: true,
debug: true,
grouping: {
deep: true,
observable: false //Needed so added objects AFTER the initial setup get included
},
};
ko.validation.init(validationOptions);
// define array model
var Item …Run Code Online (Sandbox Code Playgroud) 我有一个viewmodel,它有一个可观察的,并且我在其上应用了一些验证.
现在,当我使用自定义validationMessage绑定时,为了显示错误,我在ko验证库中收到以下错误:
<script type="text/html" id="TEXTBOX_Template">
<input type="text" data-bind="value: question().s_answer" />
<span class="validationMessage"
data-bind="validationMessage: question().s_answer"></span>
</script>
Run Code Online (Sandbox Code Playgroud)

我正在使用ko和ko-validation的最新版本.
我的设置如下:
ko.validation.init({ decorateInputElement: false,
messageTemplate: 'error_Template' });
ko.validation.makeBindingHandlerValidatable("selectedOptions");
Run Code Online (Sandbox Code Playgroud)
错误模板(但在此示例中不需要,因为我想使用validationMessage):
<script type="text/html" id="error_Template">
<!-- ko if: (field.isModified() && !field.isValid()) -->
<span class="validationMessage" data-bind="text: field.error"></span>
<!-- /ko -->
</script>
Run Code Online (Sandbox Code Playgroud)
如果这与observable一起工作,那么它应该与observableArray一起工作,因为我有一个使用ko foreach的单选按钮列表,当有验证时,错误会显示在每个输入单选按钮之后.
任何建议都会有帮助!
谢谢