Показать сообщение отдельно
  #6 (permalink)  
Старый 21.01.2013, 16:53
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

набросок на коленке за минутку.
приерно в этом ключе надо воять.


Собственно код+тест.
var store={
     //хранилище действий, сюда можно запихивать обьекты, функции, всё что душе угодно
     store:[],
     //позиция курсора
     count:0,
     //позицию курсора выше которой нельзя сдвинуться в redo
     maxcount:0,

     //сохраняем действие пользователя
     save:function(param){        
         alert('пользователь совершил действие: '+param);
       	 this.count++;
         this.maxcount=this.count;         
         this.store[this.count]=param;
     },
    
     // откат (false - значит что откатывать некуда)
     undo:function(){
       if (this.count>1){
         this.count--;
         return this.store[this.count];          
       } else return false;
     },

    // восстановление (false - значит что восстанавливать нечего, верхняя граница определяется по this.maxcount)
     redo:function(){
       if(this.count<this.maxcount){
         this.count++;
         return this.store[this.count];          
       }
       else return false;
     }
}

alert("false - значит что undo/redo не даст эфекта, в случае false нечего делать ненадо. В примере специально используются лишние undo и redo, для правдоподобной имитации пользователя" );
store.save('действие1');
store.save('действие2');
store.save('действие3');
store.save('действие4');      
      
alert('откат на '+store.undo());      
alert('откат на '+store.undo()); 
alert('откат на '+store.undo()); 
alert('откат на '+store.undo()); 
      
alert('востановлено '+store.redo());      
alert('востановлено '+store.redo()); 
alert('востановлено '+store.redo());      
alert('востановлено '+store.redo()); 
alert('востановлено '+store.redo());      
alert('востановлено '+store.redo()); 
      
      
alert('откат на '+store.undo());      
alert('откат на '+store.undo());      

store.save('2-1 действие');      
store.save('2-2 действие');                  
store.save('2-3 действие');      
store.save('2-4 действие');            
alert('откат на '+store.undo()); 
alert('откат на '+store.undo()); 
      
alert('востановлено '+store.redo());      
alert('востановлено '+store.redo());



в примере абстрактные данные- просто с строка с текстом,
ну а в вашем случае это быдет сериализованная форма.
ну или value изменённого поля, и ссылка на это поле
тогда value будет восстанавливаться для конкретного поля
Это будет выглядеть примерно так
$('input').change(function(){
    store.save({
        target:$(this),
        val:$(this).val()
    })
})

$('#undo').click(function(){
    var d=store.undo();
    d.target.val(d.val)
})
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 21.01.2013 в 17:24.
Ответить с цитированием