我使用Ko的一个特殊的扩展版本,它在依赖的observable上使用commit()/ peek()类型的函数,这样我只在将数据提交到数据库时才将数据保存到表单上恢复取消。为什么knockoutJS中的复选框只有在选中时才写入?
问题我遇到的情况是,当我检查一个复选框时,在被保护的observable上正确调用write函数。但是,如果我取消选中复选框,则不会调用写入函数,因此当模型发送到我的MVC控制器时,复选框布尔值仍然为TRUE。
为什么knockout不能写出FALSE值?
代码为修订问题:
请参见本文的jsfiddle这里证明:http://jsfiddle.net/b2Qu2/3/
小问题
注意有其他1个问题演示 - 为某些原因,当我选中/取消选中复选框时,即使将用户界面链接到dependentObservable,窥视的值也不会在用户界面上更新。您仍然可以通过单击“peek”按钮来查看该值。
主要问题
要重现的问题:
1) Click 'peek' button: Shows FALSE - CORRECT
2) Check IsAdmin checkbox
3) Click 'peek' again: Shows TRUE - CORRECT
4) Uncheck IsAdmin
5) Click 'peek' again: SHOWS TRUE - INCORRECT!!
示例方案
设想一个对话框被示为具有用于管理员用户的复选框。如果管理员用户已存在,则只能设置1个管理员用户,并且服务器响应有效/无效。 用户然后取消选中复选框,但现在viewmodel认为复选框始终为真?使用protectedObservable的原因是,如果服务器响应成功,则调用commit()方法,以便所有内容都保存在UI中。如果用户取消对话框或发生错误,则原始值不会被覆盖。
你能分享更多的代码,至于它是如何绑定/使用? –
@RP尼迈耶 - 我用一些代码更新了我的问题。挣扎着这个! – jaffa