我正尝试通过编辑用户详细信息的对话框来创建用户网格功能。 这里是我的HTML:如何仅在验证后更新ViewModel
<!DOCTYPE html>
<html>
<head>
<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout- 2.1.0.js"></script>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css" rel ="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"> </script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
users:<hr/>
<div data-bind="foreach:users">
<div><span data-bind="text:firstname"></span> <a href="#" data- bind="click:EditUser">edit</a></div><hr>
</div>
<div id="dialog" style="display:none" data-bind="with:selectedUser">
<input type="text" data-bind="value:firstname" name="firstname"/>
<button data-bind="click:validate">save</button>
</div>
</body>
</html>
这里是我的JS:
var userVM=function(nm){
this.firstname=ko.observable(nm);
this.EditUser=function(u){
selectedUser(u);
$("#dialog").dialog();
}
};
var users=ko.observableArray([new userVM('Sholmo'),new userVM('Ahmed')]) ;
var selectedUser=ko.observable();
var validate=function(){
if($('[name="firstname"]').val()==''){
alert('must enter name');
//how prevent model updating?
}
}
ko.applyBindings();
我的问题是,我想更新用户资料只后“保存”按钮点击,验证通过,(现在的用户名立刻更新后,在输入文本改变) 这里是链接jsbin:http://jsbin.com/epocov/1/edit
谢谢,但由于某种原因,当我试图把计算与{读:wirte:}作为参数,我保持编译错误可能是原因是ko版本? – happyZZR1400
@ happyZZR1400:是的,这可能是原因。计算相对较新。你使用的是旧版本吗? – MichaelS