DojoLoader multipleDefine error

1
Recently I keep coming across an error whilst making Mendix 5 widgets and requiring additional javascript files. The same code worked perfectly well in Mendix 4, but in Mendix 5 it gives the following error: Error {src: "dojoLoader", info: Object, stack: (...), message: "multipleDefine"} info: Object def: 0 defOrder: 319 executed: 5 injected: 2 isAmd: false isXd: null mid: "CookieCuttr/widget/js/cookiejs" noReqPluginCheck: 0 pack: undefined pid: "" result: Object url: "widgets/CookieCuttr/widget/js/cookiejs.js" I have seen on the forum that several other people keep having the same issue: https://forum.mendix.com/questions/6029/Error-with-multiple-file-upload-widget-in-Mendix-5 If i take out this require statement it seems to work fine without any errors. So it leads me to think that it is something in the javascript of the required file: dojo.provide("CookieCuttr.widget.js.cookiejs"); /*! * jQuery Cookie Plugin v1.4.0 * https://github.com/carhartl/jquery-cookie * * Copyright 2013 Klaus Hartl * Released under the MIT license */ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery'], factory); } else if (typeof exports === 'object') { // CommonJS factory(require('jquery')); } else { // Browser globals factory(jQuery); } }(function ($) { var pluses = /\+/g; function encode(s) { return config.raw ? s : encodeURIComponent(s); } function decode(s) { return config.raw ? s : decodeURIComponent(s); } function stringifyCookieValue(value) { return encode(config.json ? JSON.stringify(value) : String(value)); } function parseCookieValue(s) { if (s.indexOf('"') === 0) { // This is a quoted cookie as according to RFC2068, unescape... s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); } try { // Replace server-side written pluses with spaces. // If we can't decode the cookie, ignore it, it's unusable. // If we can't parse the cookie, ignore it, it's unusable. s = decodeURIComponent(s.replace(pluses, ' ')); return config.json ? JSON.parse(s) : s; } catch(e) {} } function read(s, converter) { var value = config.raw ? s : parseCookieValue(s); return $.isFunction(converter) ? converter(value) : value; } var config = $.cookie = function (key, value, options) { // Write if (value !== undefined && !$.isFunction(value)) { options = $.extend({}, config.defaults, options); if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setTime(+t + days * 864e+5); } return (document.cookie = [ encode(key), '=', stringifyCookieValue(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // Read var result = key ? undefined : {}; // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. Also prevents odd result when // calling $.cookie(). var cookies = document.cookie ? document.cookie.split('; ') : []; for (var i = 0, l = cookies.length; i < l; i++) { var parts = cookies[i].split('='); var name = decode(parts.shift()); var cookie = parts.join('='); if (key && key === name) { // If second argument (value) is a function it's a converter... result = read(cookie, value); break; } // Prevent storing a cookie that we couldn't decode. if (!key && (cookie = read(cookie)) !== undefined) { result[name] = cookie; } } return result; }; config.defaults = {}; $.removeCookie = function (key, options) { if ($.cookie(key) === undefined) { return false; } // Must not alter options, thus extending a fresh object... $.cookie(key, '', $.extend({}, options, { expires: -1 })); return !$.cookie(key); }; })); I can't see anything visibly wrong with the file and all the name conventions to require the file seem to be correct. Does anyone have any ideas? This is how i am requiring the code: dojo.require("CookieCuttr.widget.js.cookiejs"); dojo.require("CookieCuttr.widget.js.cookiecuttrjs");
asked
2 answers
2

Hi Simon,

Took awhile to figure this out how the AMD works, but it is quite sweet

require({packages: [ { name: 'jquery', location: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1',  main: 'jquery' }]}, ["dojo",  "./widgets/CookieCuttr/widget/js/cookie.js"], function (dojo, cookie) {
        //your widget code
}

Not the require is first sets the package for jquery (cold also be local) because is required in the you cookie code.

include the full path to your cookie monster

And there you go

http://dojotoolkit.org/documentation/tutorials/1.9/modules_advanced/

answered
0

Hi Simon,

Can you post the way you include your javascript? I have been able to fix it the AMD way for the Multiple File Upload too. It solved the same kind of error

require(["dojo", "dijit", "./widgets/DropZone/widget/lib/dropzone.js", "dojo/NodeList-traverse"], function (dojo, dijit, Dropzone) {
    //THE WIDGET CODE  
}

Note that I have used the full path to the widget: See: http://dojotoolkit.org/documentation/tutorials/1.7/modules/

answered