Knockout js - 肮脏的旗帜问题

时间:2011-11-04 18:24:16

标签: asp.net-mvc knockout.js

我在我的视图页面使用Knockout Js。我有一个要求,如果任何可编辑字段更改,我必须启用保存按钮否则。这很好用。 我的问题是我的每一行都有复选框。这些是我的viewModel中的可观察项。现在发生的事情是当我选中或取消选中任何复选框时,Knockout将其视为Dirty item并启用我不想要的Save按钮。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

我不确定你用于脏标志的确切代码,但如果它涉及在this之类的dependentObservable中使用ko.toJS,那么有一个技巧可以用来让它跳过一些可观察的。

如果您创建一个属于函数属性的observable,则ko.toJS将无法找到它。

以下是两个示例(someFlaganotherFlag):

function Item(id, name) {
    this.id = ko.observable(id);
    //create a sub-observable that the dirty flag won't find
    this.id.someFlag = ko.observable(false);
    this.name = ko.observable(name);
    this.dirtyFlag = new ko.dirtyFlag(this);

    //or similarly, place an observable on a plain ol' function
    this.forgetAboutMe = function() { };
    this.forgetAboutMe.anotherFlag = ko.observable(false);  
}

此处示例:http://jsfiddle.net/rniemeyer/vGU88/