Выбивание js — проблема с грязным флагом

#asp.net-mvc #knockout.js

#asp.net-mvc #knockout.js

Вопрос:

Я использую Knockout Js для своей страницы просмотра. У меня есть требование, при котором, если какое-либо редактируемое поле изменяется, я должен включить кнопку сохранения, иначе нет. Это работает хорошо. Моя проблема в том, что у меня тоже есть флажки для каждой строки элемента. Это наблюдаемые элементы в моей ViewModel. Что происходит сейчас, когда я устанавливаю или снимаю какой-либо флажок, Knockout считает это грязным элементом и включает кнопку Сохранения, которая мне не нужна.

Как я могу решить эту проблему?

Ответ №1:

Я не уверен в точном коде, который вы используете для грязного флага, но если это связано с использованием ko.toJS в зависимом OBSERVABLE, подобном этому, то есть трюк, который вы можете использовать, чтобы заставить его пропустить некоторые наблюдаемые.

Если вы создадите наблюдаемое, которое является свойством функции, то ko.toJS не найдете его.

Вот два примера ( someFlag и anotherFlag ):

 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 /