Как я могу установить выражения именованных функций в опциях Dropzone? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть несколько Dropzones в моем проекте, которые очень похожи. На одном из них мне пришлось создать минимальную ширину файла, но видео Dropzone не работает с кодом ширины файла. В итоге мне пришлось создать отдельный вызов опций для каждой Dropzone. Это создало много дублированного кода для функций, которые находятся в вызовах обеих опций. Есть ли способ, которым я могу создать выражения именованных функций для всех своих опций и использовать имена, чтобы у меня не было такого большого количества дублированного кода?

Dropzone.options[item.substring(1, item.length)] = {
    acceptedFiles: files,
    previewTemplate: document.getElementById('tpl').innerHTML,
    accept: function(file, done) {
        file.acceptDimensions = done;
        file.rejectDimensions = function () { done("Image must be at least 450 pixels wide."); }
    },
    init: function () {
        this.on("thumbnail", function (file) {
            if (file.width !== undefined) {
                if (file.width < 3 * 150) {   // File must be at least 3 blocks wide
                    file.rejectDimensions();
                } else {
                    file.acceptDimensions();
                }
            }
        });
        this.on("success", function (file, response) {
            // code here, including persist variable, which I need to pass in
            generateUIDs(Dropzone.forElement(item).files, persist);
            // more code
        });
    },
    sending: function (file) {
        Dropzone.forElement(item).removeAllFiles();
    },
    removedfile: function (file) {
        // code here, also need persist for this call
        generateUIDs(Dropzone.forElement(item).files, persist);
        //more code
    }
};

В идеале, я бы хотел, чтобы каждая строка accept, send и removeFile содержала по одной строке для ссылки на выражение именованной функции с передачей моей переменной persist. Мне бы хотелось, чтобы события init делали то же самое.

1 Ответ

0 голосов
/ 13 мая 2019

Я разобрался в синтаксисе:

Dropzone.options[item.substring(1, item.length)] = {
    acceptedFiles: files,
    maxFilesize: 512,
    previewTemplate: document.getElementById('tpl').innerHTML,
    init: function () {
        this.on("success", function (file, response) { return DropzoneOnSuccess(file, response, item, persist, btn) });
    },
    sending: function (file) {
        Dropzone.forElement(item).removeAllFiles();
    },
    removedfile: function (file) { return DropzoneRemoved(file, item, persist, saver, btn); }
};

var DropzoneAccept = function (file, done) {
    file.acceptDimensions = done;
    file.rejectDimensions = function () { done("Image must be at least 450 pixels wide."); }
};

var DropzoneCheckThumbnail = function (file) {
    if (file.width !== undefined) {
        if (file.width < 3 * 150) {   // File must be at least 3 blocks wide
            file.rejectDimensions();
        } else {
            file.acceptDimensions();
        }
    }
};

var DropzoneOnSuccess = function (file, response, persist) {
    // code
    generateUIDs(Dropzone.forElement(item).files, persist);
    //more code
};

var DropzoneRemoved = function (file, persist) {
    // code
    generateUIDs(Dropzone.forElement(item).files, persist);
    // more code
};
...