Javascript Bootstrap twitter 3.0和knockoutjs验证

Javascript Bootstrap twitter 3.0和knockoutjs验证,javascript,css,twitter-bootstrap,knockout.js,Javascript,Css,Twitter Bootstrap,Knockout.js,使用Twitter引导,验证类,例如has error或has warning需要放在包装表单组元素上,以便设置输入元素及其标签的样式。但是敲除验证将类添加到输入元素中 <div class="form-group has-error"> <label class="control-label">Input with error</label> <input type="text" class="form-control"> <

使用Twitter引导,验证类,例如
has error
has warning
需要放在包装
表单组
元素上,以便设置输入元素及其标签的样式。但是敲除验证将类添加到输入元素中

<div class="form-group has-error">
    <label class="control-label">Input with error</label>
    <input type="text" class="form-control">
</div>

输入错误
是否可以通过将类添加到
div
而不是
输入来配置敲除验证?

您将使用引导表单div上的“validationElement”绑定处理程序-

<div class="form-group" data-bind="validationElement: someObservable">
  <label class="control-label" for="inputSuccess">Input with success</label>
  <input type="text" class="form-control" id="inputSuccess">
</div>

这是我在我们的工具中执行此操作的方式

布林金的答案并不能让你完全明白。您还需要指定
errorMessageClass
decorateInputElement
选项

ko.validation.init({
errorElementClass:'有错误',
errorMessageClass:“帮助阻止”,
decorateInputElement:true
});
var viewModel=ko.validatedObservable({
名称:ko.observable().extend({
必填项:true
}),
电子邮件:ko.observable().extend({
要求:正确,
电子邮件:真的
}),
提交:函数(){
如果(!this.isValid()){
this.errors.showAllMessages();
}否则{
警惕(“干得好”);
}
}
});
应用绑定(视图模型)

名称
电子邮件
提交

您可以像这样扩展敲除验证核心:

var init = ko.bindingHandlers['validationCore'].init;
ko.bindingHandlers['validationCore'].init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
    init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
    var config = ko.validation.utils.getConfigOptions(element);
    // if requested, add binding to decorate element
    if (config.decorateInputElement && ko.validation.utils.isValidatable(valueAccessor())) {
        var parent = $(element).parents(".form-group");
        if (parent.length) {
            ko.applyBindingsToNode(parent[0], { validationElement: valueAccessor() });
        }
    }
};

此代码使父窗体组使用与输入相同的类进行修饰。

您能澄清您的英语吗?特别是,这句话没有意义:“Bootstrap想要更改div而不是输入元素。”想要更改div吗?什么部门?以什么方式?这与输入元素有什么关系?该选项现在称为decorateInputElement。看,谢谢!对于任何尝试类似操作的人,在启动bindsThanks之前,需要在viewmodel/之外运行init函数,只需将
config.decorateElement
更改为
config.decorateInputElement
,以匹配当前版本。这是一个非常好的解决方案,这也让我找到了一个其他人可能也会遇到的问题的根源——我使用一个自定义绑定来添加包装器元素(对于Material Design Lite),并且还有一个value/textInput绑定。现在看来,顺序很重要,因为您需要在validation init启动之前添加包装器元素,所以请确保value/textInput绑定在添加包装器元素的任何自定义绑定之后。
var init = ko.bindingHandlers['validationCore'].init;
ko.bindingHandlers['validationCore'].init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
    init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
    var config = ko.validation.utils.getConfigOptions(element);
    // if requested, add binding to decorate element
    if (config.decorateInputElement && ko.validation.utils.isValidatable(valueAccessor())) {
        var parent = $(element).parents(".form-group");
        if (parent.length) {
            ko.applyBindingsToNode(parent[0], { validationElement: valueAccessor() });
        }
    }
};