2013-02-07 3 views
0

Привет, ребята Я создаю веб-приложение с редактируемым jqGrid (v4.4) и по умолчанию, когда вы находитесь в режиме редактирования (встроенное редактирование), и вы нажимаете клавишу Enter, он вызывает метод saveRow jqGrid, который фактически пытается сохранить строку.Пользовательские привязки для переопределения существующих

Проблема в том, что я использую собственный способ сохранения моих строк, и я использую saveRow только после того, как сначала сделаю что-то другое.

Я создал клавиш для Enter, как это:

$(document).keyup(function (e) { 
       if (e.keyCode == 13) { 
        if (lastsel) { 
         jQuery('#list').jqGrid('saveRow', lastsel, false, 'clientArray'); 
         var rowData = jQuery('#list').jqGrid('getRowData', lastsel); 
         // alert(rowData); 
         // alert(JSON.stringify(rowData)); 
         jQuery.post('Home/Save?inputEmployee=', JSON.stringify(rowData)); 
         lastsel = false; 
        } 
       } 
       }); 

Проблема заключается в том, что она делает и то, что jqGrid определили для связывания И то, что я выше.

Есть ли способ избавиться от предыдущего привязки для ввода до того, как я воспользуюсь моим?

EDIT: Я Inculed мой HomeController Сохранить метод:

public void Save(string inputEmployee) 
{ 
    Employee employeeData = JsonConvert.DeserializeObject(inputEmployee.ToString(), typeof(Employee)) as Employee; 
    var context = new EmployeeDataContext(); 
    Employee employee = context.Employees.Single(e => e.ID == employeeData.ID); 
    employee = employeeData; 
    context.SubmitChanges(); 
} 

Так что я делаю, я создал LINQ к модели SQL и я использую это контекст для получения/набор данных из/в базу данных. Поэтому я подумал, что передаю строковый объект Employee в качестве параметра, а затем десериализую его с помощью моего контроллера.

ответ

1

Мне кажется, что вы выбрали не лучший способ требования. Из кода, который вы опубликовали, можно увидеть, что вы хотите использовать локальное редактирование (url: "clientArray" вариант editRow), но вы хотите дополнительно сделать дополнительный действие после сохранения строки. В случае наилучшего выбора можно было бы использовать обратный вызов aftersavefunc. Таким образом, вызов editRow может быть что-то вроде

onSelectRow: function (id) { 
    var $this = $(this); 
    ... 
    $this.jqGrid("editRow", id, { 
     keys: true, 
     url: "clientArray", 
     aftersavefunc: function (rowid) { 
      $.post("Home/Save", 
       JSON.stringify($this.jqGrid("getRowData", rowid))); 
     } 
    }); 
    .... 
} 

Я не был уверен, как вы хотите, чтобы отправить данные в Home/Save URL. Вы использовали параметр inputEmployee без какого-либо значения. Вы можете отрегулировать приведенный выше код в соответствии с вашими точными требованиями.

+0

Это может помочь мне, я думаю.Я обновил свой вопрос с помощью метода Save из моего HomeController, чтобы вы могли прокомментировать мой пост jQuery, если сможете. –

+0

@PanagiotisPalladinos: Я думаю, что вы должны использовать что-то вроде '$ .post (« Главная/Сохранить », {inputEmployee: JSON.stringify ($ this.jqGrid (« getRowData », rowid))});' или '$. post («Главная/Сохранить», JSON.stringify ({inputEmployee: $ this.jqGrid ("getRowData", rowid)})); 'зависит от других настроек. – Oleg

+0

Отлично! Первый вариант сработал. Теперь у меня возникают проблемы с фактическим обновлением строки с LINQ to SQL, но это еще одна история, так как данные передаются правильно контроллеру хе-хе. Спасибо за ваш ответ! –

0

Вы можете использовать jQuerys .data() метод, чтобы получить существующие обработчики событий для элемента

В основном вы

  • Получить старый обработчик
  • Удалить это событие
  • Добавить вы владеете обработчиком
    • выполнить исходный обработчик, если необходимо

Вот пример

var el = $(document) 
    el.on("keydown",function (e) { 
     console.log("First Event"); //Set the first Handler 
    }); 

    var h = jQuery._data(document, "events").keydown[0].handler; //The (first) Handler 

    el.off("keydown",h) 

    el.on("keydown",function (e) { 
     console.log("Second Handler") 
     h(e); 
    }); 

Тогда output would look like

//Second Handler 
//First Handler 

Я Rember, что я использовал, чтобы сделать это как el.data("events") но seems deprecated

Смежные вопросы