2015-08-18 3 views
1

Я пытаюсь интегрировать редактор jqx с jqgrid. Он отлично работает для части редактирования строки (оператор получения), но у меня все еще возникают проблемы для добавляемой части (оператор набора). Диалоговое окно появляется с редактором, но я не знаю, как получить данные из jqxeditor. Как реализовать функцию custom_value в этом случае (текстовое поле)? Спасибо!Интеграция Jqgrid и jqxeditor

$Notegrid.jqGrid({ 
     url: al.rooturl + suffix, 
     datatype: "json", 
     mtype: "POST", 
     loadonce: false, 
     altRows: false, 
     colNames: ["ID", "Note","Liée à","Actions"], 
     colModel: [ 
      { name: "id", index: "id", width: 80, align: "center",sorttype: "int" }, 
      { name: "text", index: "text",editable: true, edittype:"custom", editoptions:{ 
        custom_element:function(value, options) { 
         elm = $('<div id="'+options.id+'"></div>');       
         // give the editor time to initialize 
         setTimeout(function() { 
          elm.jqxEditor({ 
           tools: 'bold italic underline size', 
           width: '100%', 
           height: '100%' 
          }); 
          elm.val(value); 
          }, 100 
         ); 

         return elm; 
        }, 
        custom_value:function(element, oper, gridval) {  
         if(oper === 'set'){ 
          // how to set the data ? 
         }else{ 
          if(oper === 'get') { 
           return element.jqxEditor('val'); 
          } 
        } 

        }}, width: 500, formatter: formatText },... 
+0

Не могли бы вы предоставить демонстрационную версию (например, JSFiddle demo), которая может быть использована для воспроизведения проблемы? Демонстрационная версия должна использовать не минимизированную версию jqGrid: 'jquery.jqgrid.src.js' вместо' jquery.jqgrid.min.js'. Если можно отладить код, тогда можно легко найти ответ на свой вопрос. – Oleg

+0

Кстати, демо: [этот] (http://www.ok-soft-gmbh.com/jqGrid/tinyMCE2.htm) и [этот] (http: //www.ok-soft-gmbh. com/jqGrid/tinyMCE3.htm), который я создал для [ответа] (http://stackoverflow.com/a/25870585/315935) (см. много комментариев к ответу) демонстрирует использование [tinymce] (http://www.tinymce.com/), которые имеют очень тесную функциональность для jqxEditor. – Oleg

+0

Спасибо! Я уже пробовал с tinymce и тем же кодом, который вы указали в своем предыдущем ответе, но иногда у меня конфликты с другими экземплярами tinymce, которые загружаются на одной странице (на других вкладках). Один в jqgrid работает отлично, но другие не запускаются с этой ошибкой: TypeError: p не является конструктором /TinyMCE/tinymce/jscripts/tiny_mce/tiny_mce.js Ligne: 1 – Bibou

ответ

1

Я не знаю jqxEditor, но отладка ваших демо показывает, что редактирование работ, но сохраненный текст содержит двойной текст. Чтобы решить эту проблему, вы можете попробовать использовать

return element.jqxEditor('val')[0]; 

вместо

return element.jqxEditor('val'); 

См http://jsfiddle.net/OlegKi/nfo2aaj1/18/

ОБНОВЛЕНО: теперь лучше я понимаю вашу проблему. Прежде всего вы пытались использовать редактирование форм локальных данных, которые не поддерживаются из коробки в jqGrid 4.6. Он реализован в jqGrid, начиная с версии 4.7. Следующая проблема заключается в использовании div, созданного в custom_element для jqxEditor. Проблема заключается в следующем. Нужно создать элемент DOM и вернуть его (или обертка jQuery на нем, как и вы) с обратного вызова custom_element. jqGrid назначает id и name элементу. Поэтому назначение id в вашей реализации обратного вызова custom_element не требуется. Проблема, которая имеет в редактировании формы, jqxEditor, кажется, переписывает атрибуты. В качестве обходного пути я предлагаю создать дополнительные внешние<div> вместе с основным <div>, переадресованным на jqxEditor. Соответствующий код будет

custom_element: function (value, options) { 
    var elm = $("<div><div></div></div>");       
    // give the editor time to initialize 
    setTimeout(function() { 
     elm.children("div").jqxEditor({ 
      tools: 'bold italic underline size', 
      width: '100%', 
      height: '100px' 
     }); 
     elm.children("div").val(value); 
    }, 100); 

    return elm; 
}, 
custom_value: function (element, oper, gridval) { 
    if (oper === 'set') { 
     // how to set the data ? 
    } else { 
     if (oper === 'get') { 
      return element.children("div").jqxEditor('val'); 
     } 
    } 
} 

Соответствующая демонстрация http://jsfiddle.net/OlegKi/nfo2aaj1/23/, похоже, работает. Я использовал последнюю версию (4.9.2) бесплатного jqGrid в демо. Он поддерживает редактирование локальных данных. Демо демонстрирует как встроенное, так и редактируемое редактирование, и оба, кажется, работают без проблем.

+0

Спасибо за это исправление! Моя основная проблема связана с частью «set» в функции custom_value. Когда вы нажимаете кнопку «+», чтобы добавить новую строку и отправить ее, данные не собираются. Есть идеи ? – Bibou

+0

@Bibou: Добро пожаловать! Причина проблемы с кнопкой «Добавить»: вы используете * редактирование формы * для кнопки «Добавить», которая не поддерживает редактирование ** локальных ** данных в jqGrid 4.6.Вы можете использовать 'add: false' в' navGrid', а затем вызвать 'inlineNav', чтобы добавить кнопку Add, используемую с помощью встроенного редактирования. Он должен работать. – Oleg

+0

@Bibou: см. ** ОБНОВЛЕНО ** часть моего ответа для получения дополнительной информации и рабочей демонстрации. – Oleg