Угловая ячейка JQXGrid устанавливает значение & ldquo; значение & rdquo; как строка, но выглядит неправильно, если я передаю объект

Другой подход в зависимости от того, как вы меняете div. Если вы используете JQuery для изменения содержимого div с помощью метода html (), вы можете расширить этот метод и вызвать функцию регистрации каждый раз, когда вы помещаете html в div.

(function( $, oldHtmlMethod ){
    // Override the core html method in the jQuery object.
    $.fn.html = function(){
        // Execute the original HTML method using the
        // augmented arguments collection.

        var results = oldHtmlMethod.apply( this, arguments );
        com.invisibility.elements.findAndRegisterElements(this);
        return results;

    };
})( jQuery, jQuery.fn.html );

Мы просто перехватываем вызывает html (), вызывает функцию регистрации с этим, которая в контексте относится к целевому элементу, получающему новый контент, затем мы передаем вызов исходной функции jquery.html (). Не забудьте вернуть результаты исходного метода html (), потому что JQuery ожидает его для цепочки методов.

Для получения дополнительной информации об переопределении и расширении метода проверьте http: //www.bennadel. com / blog / 2009-Using-Self-Executing-Function-Arguments-To-Override-Core-jQuery-Methods.htm , где я скрещивал функцию закрытия. Также ознакомьтесь с учебником плагинов на сайте JQuery.

0
задан Fallenreaper 18 January 2019 в 15:34
поделиться

1 ответ

Я решил это довольно элегантно.

Все данные, которые будут частью dataAdapter, я проверяю на наличие сложных объектов и систематизирую их.

var data = []; //dataset
data.map( row => {
  let x = {};
  if (obj.hasOwnProperty(v) && obj[v] && obj[v].constructor === {}.constructor){
    x[v] = JSON.stringify(obj[v]);
  }else {
    x[v] = obj[v];
  }
  return x;
});

Теперь, когда данные заполнены, и столбцы установлены, мы переходим в ячейку:

col.cellsrenderer = (index: number, datafield: string, value: any, defaultvalue: any, column: any, rowdata: any): string => {
  let decode = value;
  try {
    decoded = JSON.parse(value);
  }catch (e){ 
    decoded = value;
  }

  //Now you can do custom stuff with a formatter:
  let formatter = getFormatter(XXXXX);
  let cell = `<div>${formatter.format(decoded)}</div>`; 
  //decoded would be an object OR a fundamental type string, number, etc.

  // When doing cellrenderer, you will only be able to use globalclasses, so custom component based class defintions will not work.  If needed, you would use inline styles, or expose global css/scss for a cell.
  return cell;
}
0
ответ дан Fallenreaper 18 January 2019 в 15:34
поделиться
Другие вопросы по тегам:

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