我在ASP.NET MVC 4中有一个项目,它使用knockoutjs来处理客户端的东西,比如跟踪某个字段是否已经改变。
在我的ViewModel的类声明中,我有2个observable,都初始化为""
:
private _observables = {
query: ko.observable(""),
object: ko.observable("")
}
在对话框的close
函数中,我使用isDirty()方法检查两个observable,以确定它们是否已更改,并在检测到更改时提示用户保存。
我已经介入并发现object
似乎没有被正确跟踪,尽管如上所述。在isDirty()中,knockout拉出当前状态:
target.isDirty = function () {
var currentState = ko.toJS(target);
....logic
returns dirty/notdirty
ko.toJS()
来电之后,object
的{{1}}字段始终为currentState
,这会导致状态检查失败,因为初始状态已正确记录为undefined
。
即使我在调用""
之前使用self._observables.object("")
明确设置object
,但在'脏 - 内的isDirty()
调用之后,它仍然是undefined
检查”。
我认为问题可能是视图中的绑定 - 它绑定到一个无法获得用户输入的隐藏字段,但是只要ko.toJS()
被初始化,我就看不到那个初始值正在丢失/被覆盖。