在Backbone视图中,RequireJS模块未定义

时间:2017-10-11 09:08:37

标签: javascript jquery backbone.js requirejs

我在javascript的这一部分几乎是初学者,我很感激任何想法如何解决这个问题。 我使用requirejs来定义我自己的模块,我也使用backbone.js。 假设我有一个主模块,我初始化我的Backbone视图,它被渲染没有任何问题。另外,调用方法createSchemeForm的click事件正确地创建了表单。当我通过点击调用cancel方法并且为Backbone视图定义的模块(例如" unicorn / sla / dom / helper" ...)未定义但我调用方法时,问题会出现问题createSchemeForm在开始执行模块时没有任何问题。

提前感谢您提出任何建议。

骨干视图

define("unicorn/sla/view/scheme", [
   "unicorn/sla/dom/helper",
   "unicorn/soy/utils",
   "unicorn/sla/utils"
], function (DOMHelper, soyUtils, jsUtils) {

    return Backbone.View.extend({
        el: 'body',
        inputData: {},
        btnSaveScheme: 'btn-save-sla-scheme',
        btnCancel: 'btn-cancel-sla-scheme',
        btnCreate: 'btn-create-sla-scheme',
        btnContainer: '#sla-scheme-buttons-container',
        schemeContent: '#sla-scheme-content-section',
        btnSpinner: '.button-spinner',

        events: {
            'click #btn-create-sla-scheme' : "createSchemeForm",
            'click #btn-cancel-sla-scheme' : "cancel"
        },

        initialize: function(){
            console.log("The scheme view is initialized...");
            this.render();
        },

        createSchemeForm: function () {

            this.spin();
            DOMHelper.clearSchemeContent();
            DOMHelper.clearButtonsContainer();
            //Get button
            $btnSave = soyUtils.getButton({isPrimary: 'true', id: this.btnSaveScheme, label: 'Save'});
            $btnCancel = soyUtils.getButton({isPrimary: 'false', id: this.btnCancel, label: 'Cancel'});
            //Append new created buttons
            DOMHelper.addContent(this.btnContainer, AJS.format("{0}{1}", $btnSave, $btnCancel));

            //Call service to get entry data for scheme creation form
            AJS.$.ajax({
                url: AJS.format('{0}={1}',AJS.I18n.getText('rest-url-project-scheme-input-data'), jsUtils.getProjectKey()) ,
                type: "post",
                async: false,
                context: this,
                global: false,
            }).done(function (data) {
                this.inputData = data;
                $slaSchemeForm = soyUtils.getSchemeCreateForm({slaScheme : data, helpText: AJS.I18n.getText("sla-time-target-tooltip-text")});
                DOMHelper.addContent(this.schemeContent, $slaSchemeForm);
                jsUtils.scroll(this.schemeContent, 'slow');
            }).fail(function () {
                jsUtils.callFlag('error', AJS.I18n.getText("message-title-error"), AJS.I18n.getText("sla-error-load-scheme-input-data"));
            }).always(function () {
                this.stopSpin();
            });
        },

        spin: function () {
            AJS.$('.button-spinner').spin();
        },

        stopSpin: function () {
            AJS.$('.button-spinner').spinStop();
        },

        cancel: function () {
            jsUtils.clearButtonsContainer();
            jsUtils.clearSchemeContent();
            $btnCreateScheme = soyUtils.getButton({isPrimary: 'false', id: this.btnCreate, label: 'Create SLA Scheme'});
            DOMHelper.addContent(this.btnContainer, $btnCreateScheme);
            DOMHelper.addContent(this.schemeContent, soyUtils.getSchemesTable(new Array())); // TODO - get current data from server instead of empty array
        }

    });
});

主模块在哪里是Backbone视图初始化

define("unicorn/sla/project/batch", [
   "unicorn/sla/utils",
   "unicorn/sla/data/operations",
   "unicorn/sla/data/validator",
   "unicorn/sla/dom/helper",
   "unicorn/sla/model/confirm/message",
   "unicorn/sla/view/scheme",
   "exports"
], function (jsUtils, operations, validator, DOMHelper, ConfirmMessage, SchemeView, exports) {
    //Load project batch
    exports.onReady = function () {
        $schemeView = new SchemeView();
        $schemeView.render();
    }
});


AJS.$(function () {
    AJS.$(document).ready(function () {
        require("unicorn/sla/project/batch").onReady();
    });
});

0 个答案:

没有答案