Рендеринг директивы AngularJS в jqxGrid

Использование jqxGrid для создания таблицы с данными (очевидно).

У меня есть элемент директивы angular, загруженный в jqxGrid, данные отлично обновляют сетку, но он просто остается там, без рендеринга, и я не могу понять, как запустить рендеринг.

Вот мои настройки jqx:

   AppvisAgentsCtrl.settings = {
        autowidth: true,
        ...
        columns: [

            { text: 'A', cellsrenderer: insertActionMenu, width: 50 },
           ...
        ]
    }

Где insertActionMenu прямо сейчас:

function insertActionMenu(){

    var output = [
        '<actionmenu></actionmenu>'
        ].join('');

    return output;
}

Моя проблема в том, что в инспекторе DOM я просто вижу <actionmenu></actionmenu>, сидящий там на странице в каждом столбце, и я хочу сказать, чтобы он отображался в соответствии с директивой, которой он должен быть.

Да, директива actionmenu работает. Я использую ее еще несколько раз в приложении.

ИЗМЕНИТЬ

Все находится внутри директивы jqx-grid:

<jqx-grid 
    jqx-settings="appvisagents.settings" 
    jqx-source="appvisagents.testData.things">
</jqx-grid>

person Likwid_T    schedule 09.11.2014    source источник


Ответы (2)


Предполагая, что это происходит внутри директивы, вам нужно будет скомпилировать '<actionmenu></actionmenu>' перед ее добавлением. см. $compile службу здесь

person Sebastian Piu    schedule 09.11.2014
comment
Вы имеете в виду функцию компиляции директивы или функцию insertActionMenu()? - person Likwid_T; 10.11.2014
comment
служба $compile может использоваться только внутри директивы, и вам нужно скомпилировать добавление директивы actionMenu внутри функции, чтобы angular знал, что ему нужно заменить ее настоящей директивой dom. Я понимаю, что код, вероятно, не находится в директиве jqxgrid в вашем случае, поэтому я не уверен, сможете ли вы это сделать. Возможно, попробуйте это: stackoverflow.com/questions/22370390/ - person Sebastian Piu; 10.11.2014

Итак, единственный способ, которым я обнаружил, что это работает, - это использовать событие «рендеринг» в настройках и $ компилировать мои меню действий одно за другим.

К сожалению, я не смог $скомпилировать его перед внедрением, так как jqx-gid будет вставлять только текст и HTML, и любая попытка добавить объект приводит к добавлению [Object object].

AppvisAgentsCtrl.settings = {
        autowidth: true,
        ...
        columns: [

            { text: 'A', cellsrenderer: insertActionMenu, width: 50 },
           ...
        ],
        rendered: function(){ 
            $element.find('actionmenu').each(function(i,e){
                $compile(e)($scope);
            });
        }
    }

Для меня это не хорошее решение по следующим причинам:

  • Несмотря на то, что для этой задачи были наложены jqwidgets, я хотел максимально избегать использования jQuery.
  • Я не знаю, как это повлияет на производительность при работе с тысячами строк.
  • Мне все еще нужно повозиться, чтобы связать эту директиву с моделью данных, соответствующей строке

Тем не менее, я получил его для рендеринга.

person Likwid_T    schedule 10.11.2014
comment
Вы уже нашли лучшее решение? - person badera; 04.02.2016