Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more

Can't resolve dependency "epi.globalcommandregistry" when setting up a custom command

Vote:
 

I have the following javascript in the file ClientResources/Scripts/widgets/media/Mediacommands.js:

require(['dojo/aspect', 'epi/dependency', 'samples/media/MediaUpdateCommand'], function (aspect, dependency, MediaUpdateCommand) {

    //alert('registering');
    var handle,
		key = 'epi.cms.globalToolbar',
		registry = dependency.resolve('epi.globalcommandregistry'),
		callback = function (identifier, provider) {
		    if (identifier !== key) {
		        return;
		    }

		    provider.addCommand(new MediaUpdateCommand(), {
		        showLabel: true
		    });

		    handle.remove();
		};

    handle = aspect.after(registry, 'registerProvider', callback, true);
});

My module.config looks like this:


    
        
    
  
        
        
  
  
    
      
    
  
  
    
  

This is intended to add a button to the Editor toolbar, and *sometimes* works. However around 70% of the time I see the error Can't resolve dependency "epi.globalcommandregistry" in the console.

This corresponds to the line registry = dependency.resolve('epi.globalcommandregistry'), in the javascript above.

Is there any reason why the dependency can't be resolved at some times and more to the point, how can I ensure it's resolved every time?

Thanks,

Mark

#119097
Mar 20, 2015 15:51
Vote:
 

Hi!

I suggest that you create an init module on the client since this will make the code run at the right time. Here is a copy paste example from something I worked on recently:

Module.config:

<clientModule initializer="[your module class including namespace]">
<moduleDependencies>
<add dependency="CMS" type="Require RunAfter" />
</moduleDependencies>
</clientModule>

Client module sample:

define([
    // Pull in the patches. Not used here, just evaluated, since this is the first module loaded when starting the application.
    "dojo/_base/declare",
    "dojo/_base/lang",
    "epi/_Module",
    "epi/dependency",
    "instantTemplates/AddItemFromTemplateCommandProvider"
],

function (
    declare,
    lang,
    _Module,
    dependency,
    AddItemFromTemplateCommandProvider
) {

    return declare([_Module], {
        // summary:
        //		Template module implementation.
        //
        // tags:
        //      internal

        _settings: null,

        constructor: function (settings) {
            this._settings = settings;
        },

        initialize: function () {

            var commandregistry = dependency.resolve("epi.globalcommandregistry");

            //We need to wait for the viewsettings to initialized before creating the global toolbar command provider
            commandregistry.registerProvider("epi.cms.globalToolbar", new AddItemFromTemplateCommandProvider({templatesRoot : this._settings.templatesRoot}));
        }
    });
});



#119233
Mar 25, 2015 8:22
Vote:
 

Linus,

That did it for me (specifically the module.config settings) - thanks!.

#119583
Mar 30, 2015 12:57
This topic was created over six months ago and has been resolved. If you have a similar question, please create a new topic and refer to this one.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.