2016-05-30 5 views
0

Я использую плагин таблиц данных jQuery (https://datatables.net/).Aurelia: данные исчезают в таблице при использовании плагина jQuery DataTables

Вы можете использовать его на HTML таблицу, как это:

$("#table").DataTable(); 

Если у меня есть нормальный HTML таблицу на мой взгляд, и вызвать выше в attached() методе моей точки зрения модели все работает отлично.

Но все идет не так, когда я пытаюсь сделать это, создавая таблицу из данных, которые я получаю из своего API.

Таблица генерируется, но под ней вместо того, чтобы говорить что-то вроде «показ от 0 до 10 из 93 записей», он говорит «показ от 0 до 0 из 0 записей». Кроме того, если я попытаюсь отсортировать таблицу по данному столбцу, все данные исчезнут, оставив только заголовки столбцов.

UPDATE: Я не использую никаких вызовов Ajax для сортировки таблицы. Я создаю таблицу из данных, которые я получаю с моего сервера. Чтобы уточнить: я получаю объект json с сервера. Используйте объект json для построения таблицы с помощью строки «repeat.for =» таблицыData ». Вызов .DataTable() в прикрепленном крючке создает проблему. Я попытался создать простую кнопку, которая вызывает метод .DataTable() при нажатии. Он правильно строит таблицу. Кажется, проблема связана с вызовом в прикрепленном() hook

+1

Что такое jquery? –

+0

Я не вижу большого смысла в использовании данных, когда у вас есть привязка aurelia. Я бы предпочел использовать 'repeat.for' для генерации строк. Вы можете создать любую функцию Datables с помощью Aurelia. Это только мое мнение –

+0

Я использую repeat.for для создания моей таблицы. Datables существует для поиска в реальном времени, разбиения на страницы. Я могу построить его, конечно, но вопрос здесь в том, почему он не работает так, как должен –

ответ

0

Вы должны создать custom element для своего объекта DataTable. Скорее всего, вы захотите использовать custom binding в элементе DataTable, где вы передаете данные. Наконец, вы захотите вызвать какую-то функцию обновления или разрыва/наращивания в вашем плагине DataTable в обратном вызове «valueChanged» привязки rows.

dataTable.js

@inject(Element) 
export class DataTableCustomElement { 

    element; 
    @bindable rows; 

    constructor(Element) { 
     this.element = $(Element); 
    } 

    rowsChanged(newValue, oldValue) { 
     this.element.DataTable.refresh(); // or whatever it is 
    } 
} 

view.html

<data-table rows.bind="data.rows"></data-table> 

Я не знаю ничего о вашем DataTable API. Возможно, он не предназначен для обработки новых данных, поступающих с сервера. Я оставлю это читателю.

+0

Я не использую никаких вызовов Ajax для сортировки таблицы. Я создаю таблицу из данных, которые я получаю с моего сервера. Чтобы уточнить: –

+0

Вопрос обновлен –

2

Я согласен с МЮ, но вы можете падать в фокусе проблем с синхронизацией.

Aurelia использует систему связывания асинхронных очередей, которые обновление DOM в микро очередь задач для того, чтобы партии их для повышения производительности (вот почему это так быстро)

Вы можете попробовать следующее, которые в теории должны позволить любому повтору привязки, которые должны быть обработаны до того, как ваши таблицы данных будут инициализированы.

import {TaskQueue} from 'aurelia-framework'; 

@inject(Element, TaskQueue) 
export class DataTables { 
    constructor(element, taskQueue) { 
    this.element = element; 
    this.taskQueue = taskQueue; 
    } 

    attached() { 
    this.taskQueue.queueMicroTask(() => { 
     // Init data tables here 
    }); 
    } 
} 
+0

Проблема сохраняется. Моя проблема заключается не в том, что данные не отображаются в таблице. Это. Но, например, есть сообщение с «нет данных, доступных в таблице» ниже, но данные есть. Но второй я пытаюсь сортировать столбец или искать все данные. Любое другое предложение? –

+0

Ах, извините, я уверен, что у меня все получилось, вот мысль, есть ли у вас какие-либо пользовательские теги элементов, которые вы закрыли самостоятельно? Все нестандартные теги HTML должны иметь явный закрывающий тег и не могут быть закрыты сам собой, это может вызвать странное поведение. – Charleh

+0

Также убедитесь, что вы правильно создали thead и tbody, поскольку, по моему мнению, таблицы данных придирчивы к тому, что выглядит DOM, прежде чем оно создаст Таблица – Charleh

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