2016-12-12 4 views
1

У меня возникли проблемы с тем, как добавить стороннюю библиотеку JavaScript в Aurelia (в данном случае dropzone.js).Добавление сторонней библиотеки JavaScript (dropzone.js) в Aurelia

Я установил Dropzone через НПЙ и настроил его в aurelia.json:

{ 
    "name": "dropzone", 
    "path": "../node_modules/dropzone/dist/min", 
    "main": "dropzone.min", 
    "resources": [ 
    "dropzone.min.css" 
    ] 
} 

И добавил требуется заявление для CSS к моему app.html:

<require from="dropzone/dropzone.min.css"></require> 

Однако, когда Я пытаюсь сделать простой тест, например, просто поместить HTML непосредственно в свой шаблон, функциональность не работает.

<template> 
    <form action="/file-upload" class="dropzone" id="my-awesome-dropzone"></form> 
</template> 

Я также попытался это решение, но не мог заставить его работать, а также: Dropzone implementation in Aurelia not working in Component

+0

Вы получаете какие-либо ошибки? Ответ, который вы опубликовали, должен был работать –

+0

Нет. Я не получаю никаких ошибок. Когда я пытаюсь перетащить изображение в окно, которое отображается, браузер просто открывает изображение. Я думаю, проблема в том, что элемент .dropzone не инициализируется JavaScript. Кроме того, если я нажимаю на поле, ничего не происходит, тогда как с примером с сайта dropzone.js должен появиться поле загрузчика файлов. –

+0

Вы импортировали его в модель просмотра? – TylerJPresley

ответ

1

Он не будет работать в соответствии с вашим примером просто потому, что загружается dropzone.js код библиотеки, прежде чем ваш взгляд-модель активируется, и Аурелия не повторит его. Вам нужно активировать вручную dropzone.js внутри вашего метода attached() в вашем ViewModel, как это:

// JQuery option 
$("div#myId").dropzone({ url: "/file/post" }); 

// Non-JQuery option 
var myDropzone = new Dropzone("div#myId", { url: "/file/post"}); 

Таким образом, ваш ViewModel может выглядеть следующим образом:

файл-upload.js

export class FileUpload { 

    attached() { 
    // activate dropzone.js element 
    this.zone = new Dropzone(this.dz, { url: "/file/post"}); 
    } 

    detached() { 
    // deactivate the element 
    this.zone.destroy(); 
    } 

} 

файл-upload.html

<template> 
    <form ref="dz" action="/file-upload" class="dropzone"> 
    <div class="fallback"> 
     <input name="file" type="file" multiple /> 
    </div> 
    </form> 
</template> 
+1

Спасибо! Это работает! Теперь это имеет смысл, когда вы объяснили это. Чтобы он работал с кодом как настройка в вопросе, я добавил следующий код: 'attach() {$ ('. Dropzone'). Dropzone ({url: '/ post'}); } ' –

+0

этот шаг был объяснен в ответе, который вы упомянули в своем вопросе ... –

+0

Я рад, что это сработало. Я добавил образец кода, чтобы сделать его более понятным. – LStarky

0

Попробуйте добавить import 'dropzone'; на ваш взгляд-модели.

+0

Нет, похоже, что это тоже не работает. –

0

Попробуйте использовать dropzone-amd-module.min. Как это:

{ 
    "name": "dropzone", 
    "path": "../node_modules/dropzone/dist/min", 
    "main": "dropzone-amd-module.min", 
    "resources": [ 
    "dropzone.min.css" 
    ], 
    "deps": ["jquery"] 
} 

Затем import Dropzone from 'dropzone';, как и в другой ответ

+0

Нет, это тоже не работает. Я перезапустил 'au run --watch', чтобы быть уверенным. Странно то, что если я посмотрю файл vendor-bundle.js, я вижу там код dropzone.js, поэтому не знаю, почему он не работает. –

+0

положил точку останова в прикрепленном методе, см., Если 'Dropzone' не является неопределенным –

+0

Да, я установил точку останова в конструкторе и набрал« Dropzone »в консоли. Он не определен. –