dijit.dialog не является конструктором - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть старое ZendApplication (ZF1), и теперь я пытаюсь перенести это приложение в ZF3. В приложении я использую некоторые элементы Dojo, например Helpdialog. В ZF3 Dojo не поддерживается напрямую Zend, поэтому я использую Dojo напрямую без Zend Interaction.

Итак, в моем Layout View я загружаю Dojo следующим образом:

<script src="<?= $this->basePath()?>/assets/custom/js/dojo/dojo/dojo.js" data-dojo-config="async: true,isDebug: true,parseOnLoad: true">

require ([
    'dijit/Dialog',
    'dijit/form/Button',
    'dijit/form/SimpleTextarea',
....
  'dojox/widget/Standby',
  'dojo/domReady!',
],)
);

Это код я хочу использовать:

       require (['dojo/domReady!','dijit/Dialog']);
          function showHelp(id,help) {
                dojo.xhrGet({
                    url: "http://localhost/NeuesProjekt/public/test/test",
                    //url:"http://localhost/NeuesProjekt/public/", // baseUrl + "/help/index/charkey/" + id,
                    load: function(data) {
                            helpDlg = new dijit.Dialog({
                                title: "help",
                                content: "data",
                                style: "width: 550px;"
                            });
                            helpDlg.show();
                    },
                    error: function(error) {
                            var data = "An unexpected error occurred: " + error;
                            helpDlg = new dijit.Dialog({
                                title: "help",
                                content: "data2",
                                style: "width: 550px"
                            });
                            helpDlg.show();
                    }
                });

            };

Это будет работать, пока приложение не достигнет new dijit.Dialog там я получил ошибку dijit.dialog не является конструктором

Где моя ошибка?

РЕДАКТИРОВАТЬ: В моих представлениях я вызываю функцию в привязке, как эти: 'href = "javascript: showHelp (' Help ')"> HELP'

EDIT2 : Я отлаживаю F12, он говорит, что диалог не определен, но dijit был найден.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Я нашел свою ошибку. я изменил только требования к Dojo, поэтому он будет работать: dojo.require ('dijit.form.Button');

0 голосов
/ 01 апреля 2020

Похоже, у вас есть смесь до 1.7 стиля додзё и 1.7 + один (см., Например, здесь для использования require до 1.7 и после). Поскольку я вижу «asyn c: true», вы используете версию od dojo> = 1.7. Смотрите здесь , как правильно использовать загрузчик AMD Dojo. При использовании оператора require вы не уверены, что соответствующие модули будут загружены при их использовании (это асинхронно). Это может быть причиной того, что вы получили ошибку в новом dijit.dialog. Правильный путь:

require ([dijit/Dialog, dojo/domReady!], function(Dialog){
    ...
    var helpDlg = new Dialog({...});
    helpDlg.show();
});

Обратите внимание, что условием является установка dojo / domReady! последний (см. здесь ). Также обратите внимание, что dojo.xhrGet (...) устарел (см. здесь ) ... что не означает, что он не будет работать (я не знаком со стилем pre 1.7).

Отредактировано, чтобы ответить на ваш комментарий ниже:

require ([dijit/Dialog, dojo/domReady!], function(Dialog){
    var showHelp = function(id, help){
        ...
        var helpDlg = new Dialog({...});
        ...
        helpDlg.show();
        ...
    }
    showHelp(1, 'please help me!');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...