gpt4 book ai didi

javascript - 如何使用 knockout 一次又一次地调用函数

转载 作者:行者123 更新时间:2023-12-02 17:30:04 25 4
gpt4 key购买 nike

我有这个 knockout 码。

self.newPatient = ko.asyncCommand({

execute: function(complete) {
var isValid=$('#addPatientForm').parsley( 'validate' );
if(isValid){
var patientJson=ko.toJSON(self.patient());
formdata.append("json",patientJson);
//self.enableButton(false);
var imagepath= $.ajax({
url: projectUrl+"newPatient",
type: "POST",
data: formdata,
processData: false,
contentType: false,
success: function (res) {
formdata = new FormData();
imagepath=res;
var length=self.patients().length;
var patient=self.patient();
// self.enableButton(true);
}
});


}
},
canExecute: function(isExecuting) {
return !isExecuting && isDirty() && isValid();
}
});

这是我的 html 输入字段

<div class="control-group">
<label class="control-label" for="inputIcon">Username :</label>
<div class="controls">
<div class="input-prepend">
<span class="add-on"><i class="icon-hand-right"></i></span>
<input class="span8" type="text" data-bind="value: username" name="username" data-required="true" data-trigger="change" data-remote="${pageContext.request.contextPath}/isUserNameExists" data-remote-method="GET">
</div>
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputIcon">Password :</label>
<div class="controls">
<div class="input-prepend">
<span class="add-on"><i class="icon-hand-right"></i></span>
<input class="span8" type="password" data-bind="value: password" name="password" data-required="true" data-trigger="change">
</div>
</div>
</div>

这是我的按钮

<button class="btn btn-primary"
data-bind="command: $root.newPatient, activity: $root.newPatient.isExecuting">
<i class="icon-ok icon-white"></i> Save
</button>

当我按下保存按钮然后执行: function(complete){.....} 被调用并在该函数内

var isValid=$('#addPatientForm').parsley( 'validate' );

调用它检查表单有效性,如果表单无效,则 isValid 为 false,因此不会调用 ajax。

我要打电话

 var isValid=$('#addPatientForm').parsley( 'validate' );
if(isValid){.....}

当任何输入字段发生更改时。那么有人可以建议我该怎么做吗?

最佳答案

您可以编写自己的绑定(bind)处理程序:

ko.bindingHandlers.parsley = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var isValid = valueAccessor();
var $form = $(element).closest('form');
$(element).change(function() {
isValid($form.parsley('validate'));
});
}
};

在你的 ViewModel 中:

self.isValid = ko.observable(false);

然后:

<form ...>
<input data-bind="parsley: isValid, ..." />
</form>

参见http://jsfiddle.net/sjroesink/ksqXx/

编辑

如果无法重现您的错误或发生错误的实际行,我无法帮助您。尝试使用 Chrome 的开发者工具查看错误发生的位置:

track error

关于javascript - 如何使用 knockout 一次又一次地调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23147592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com