объектное редактирование и isDirty () флаг

Сначала вы должны разыграть записи в массиве.

const raffles = [{"author":"Name","rafflename":"RAFFLE","amount":"10","entries":"[]"}]
// cast entries to Array
raffles[0].entries = JSON.parse(raffles[0].entries)
// now you can push them
raffles[0].entries.push('test')
console.log(raffles)

7
задан Christophe Herreman 14 October 2008 в 12:07
поделиться

7 ответов

Корректный!

Кроме того, можно выставить два метода: BeginEdit - В этом методе, Ваша метка Ваш Флаг IsDirty к Истинному. Значение Вас делает модификацию. Назовите этот метод, когда Вы соберетесь сделать модификации

CancelEdit - В этом методе, сброс Флаг IsDirty ко Лжи. Значение Вас имеет arborted процесс редактирования и вернулось назад к исходному состоянию. Назовите этот метод при отмене любых сделанных модификаций.

И после того как любые модификации сохраняются, Вы также сбрасываете Флаг IsDirty ко Лжи.

Я надеюсь, что это помогает.

3
ответ дан 6 December 2019 в 23:15
поделиться

При использовании платформы.NET можно хотеть смотреть на платформу.NET CSLA Рокфордским Lhotka: http://www.lhotka.net/cslanet/Default.aspx

CSLA является сформировавшейся платформой, которая включает объектное управление состоянием (IsDirty), функциональность отмены, привязка данных и намного больше, плюс он является бесплатной и с открытым исходным кодом.

2
ответ дан 6 December 2019 в 23:15
поделиться

Если у Вас будет ряд объектов, которые редактируются затем, то Вам, вероятно, будут нужны что-то большее чем булев флаг для isDirty (). Эта проблема не отличается от подсчета ссылок, т.е. увеличьте грязное количество на редактировании и декремент на отмене. Если Вы поддерживаете отмену, я подозреваю, что Вы собираетесь закончить некоторую довольно волосатую логику. Я не допустил бы его в Ваши объекты области.

1
ответ дан 6 December 2019 в 23:15
поделиться

Существует несколько интерфейсов, что Вы могли реализовать ту справку с отслеживанием изменений и отменой: INotifyPropertyChanged и IEditableObject. Оба из этих интерфейсов позволяют объекту играть по правилам с привязкой данных.

public class Person : INotifyPropertyChanged, IEditableObject
{
    private bool isDirty;

    public bool IsDirty
    {
        get { return isDirty; }
    }

    private string firstname = string.Empty;

    public string Firstname
    {
        get { return firstname; }
        set
        {
            if (firstname == value) return;
            firstname = value;
            NotifyPropertyChanged("Firstname");
        }
    }

    private string lastname = string.Empty;

    public string Lastname
    {
        get { return lastname; }
        set
        {
            if (lastname == value) return;
            lastname = value;
            NotifyPropertyChanged("Lastname");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(string propertyName)
    {
        isDirty = true;

        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    private bool inTrans;
    private Person copy;

    public void BeginEdit()
    {
        if (!inTrans)
        {
            if (copy == null)
                copy = new Person();

            copy.isDirty = isDirty;
            copy.Firstname = Firstname;
            copy.Lastname = Lastname;


            inTrans = true;
            isDirty = false;
        }
    }

    public void CancelEdit()
    {
        if (inTrans)
        {
            isDirty = copy.isDirty;
            Firstname = copy.Firstname;
            Lastname = copy.Lastname;

            inTrans = false;
        }
    }

    public void EndEdit()
    {
        if (inTrans)
        {
            copy = null;
            inTrans = false;
        }
    }
}
2
ответ дан 6 December 2019 в 23:15
поделиться

Да, это работает хорошо. Вместо того, чтобы отменять, я использую метод IsDirty, чтобы показать, что что-то, ВОЗМОЖНО, изменило запись, и затем это инициировало мой, "сделал рекордную логику изменения". Я разработал свою собственную платформу, где каждое поле таблицы является на самом деле свойством объекта. Каждый раз, когда поле записано в объекты "isDirty", флаг установлен. В методе "SaveObject" объекта (на самом деле это - класс помощника, но могло легко быть в объекте, но я хотел способность сохранить объекты различными способами, любить к xml, базе данных, ect.), я проверяю IsDirty и если его ложь затем я пропускаю сохранение. Это упрощает логику как каждый раз, когда у меня была возможность изменения объекта, я называю SaveObject и позволяю платформе обработать его.

1
ответ дан 6 December 2019 в 23:15
поделиться

В зависимости от Вашего домена Вы могли использовать равенство для тестирования на различия. Сохраните исходный объект и сделайте копию объекта для редактирования. Каждый раз, когда редактирование может быть выполнено, изменить UI соответственно.

Преимущество этого предложения - то, что оно не прикрепляет GUI определенная функциональность (isDirty () флаг) на Ваших объектах области, но YMMV

1
ответ дан 6 December 2019 в 23:15
поделиться

Если Вы поддерживаете операционную отмену на уровне гранулярности, больше, чем 'отмена все, так как в последний раз сохраняют', затем я предложил бы стек отмены. То, когда что-то редактируется, это (или это - операционный функтор отмены, или делегат) добираются, добавило к стеку. Когда Вы отменяете, Вы просто выталкиваете стек и отменяете вытолканную операцию. Ваш isDirty () флаг является затем просто проверкой, если стек отмены содержит объекты, а не дополнительное устройство хранения данных и логику для обновления.

1
ответ дан 6 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: