2016-02-20 4 views
3

У меня возникли проблемы с использованием jquery datatables с Aurelia. Я пытаюсь импортировать datatables, но не повезло. Когда я пытаюсь инициализировать его, он дает мне ошибкуОшибка использования Aurelia с использованием jquery datatables

Unhandled promise rejection TypeError: $(...).dataTable is not a function(…)

Мой машинопись код следующим образом:

import * as $ from 'jquery'; 
import * as dataTable from 'datatables'; 
export class App { 
router: Router; 

constructor() {} 
attached() { 
    $('#example').dataTable({ 
     "paginate": true, 
     "pageLength": 25 
    }); 
} 
activate() { 
    console.log("app.activate"); 
}.... 

Любые указатели? Cheers :)

+1

я не знаю, что DataTables есть, но я хотел бы попробовать использовать 'импортного $ от«jquery'' или 'импорт» JQuery '', а также' import' datatables'' –

ответ

2

У вас есть пара проблем, которые могут вызывать головные боли для вас.

Во-первых, jQuery экспортирует переменную по умолчанию в $. Таким образом, вы можете сделать следующее, чтобы импортировать JQuery внутри ViewModel:

import 'jquery'; 

Во-вторых, плагин DataTables расширяет библиотеку прототип JQuery, чтобы добавить себя в объект JQuery. Чтобы заставить это работать, вам нужно сначала включить jQuery, а затем плагин DataTables.

Я не мог видеть экспорт по умолчанию для использования на стороне клиента, так что это должно дать вам следующее и, надеюсь, функциональный код:

import 'jquery'; 
import 'datatables'; 

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

+0

Привет, попробовал разные способы и обнаружил, что я получил его, когда я только что вызвал импортированный dataTable как функцию в методе activate()
> activate() { > dataTable() ; ... >} Импортируя способ, который вы предложили, я получил jquery 'undefined', когда я попытался выполнить console.log. – ecif

+0

Как и где вы запускаете ведение журнала экспорта $ jQuery? Поскольку, если вы делаете это извне приложения, я считаю, что это не сработает, поскольку все внутри системы модулей инкапсулировано из глобального пространства имен. Если вы хотите console.log ($); изнутри прикрепленного() вы обязательно должны видеть, что он что-то показывает. –

+0

Эй, когда я пытаюсь импортировать его по-своему, я получаю сообщение об ошибке «src \ app.ts (6,8): ошибка TS1192: Модуль« jquery »« не имеет экспорта по умолчанию ». Мне нужно импортировать его import * as $ from 'jquery'; – ecif

1

[РЕШИТЬ] Я получил это работает инициализация DataTable в методе Activate() и оставив мой импорт, как они есть ...

activate() { 
    datatable(); 
    console.log("app.activate"); 
}.... 

Пробовал немного дальше, нашло, что это также работает .. .

import * as $ from 'jquery'; 
import "datatables"; 
//import * as dataTable from "datatable"; 

export class DatatablesExample {  
    //activate() { 
    // dataTable(); 
    //} 
    attached() { 
     $('#example').dataTable(); 
    } 
} 

К сожалению, проблема в том, что я импортировал jQuery. Но мне интересно, почему рекомендуются импорт не работает JQuery ...

import $ from 'jquery';

+0

Этот код работал для меня. 'import $ from 'jquery'; данные импортаТаблица из 'datatables'; ' –