Lukas
Lukas

Reputation: 7734

How to call function from another file with requireJS

I have two files - main, and events. I'm trying to call some function from one file to another.

So, this is how it looks:

events

require(['app/main'], function(call) {
    // click event respond test
    document.body.addEventListener("click", function(e) {
        var target = e.target;
        if (target.hasClass === "call"){
            functionCall()();
        }
    });
});

main

define(["jquery"], function() {

    // Call
    var box = $('.box');
    return function functionCall(){
        box.addClass('visible');
    }
});

What is wrong, can anyboyd help?

Upvotes: 0

Views: 4730

Answers (4)

MamaWalter
MamaWalter

Reputation: 2113

main:

define(["jquery"], function($) {

    var main =  {
        functionCall: function(){
            $('.box').addClass('visible');
        }
    }

    return main;
});

events:

require(['jquery','app/main'], function($, main) {

    $('body').on('click', function () {
        if($(this).hasClass('call')){
            main.functionCall();
        }
    });

});

Upvotes: 4

eshcol
eshcol

Reputation: 569

Firstly your code has some basic problems

In the following code

define(["jquery"], function() {

Where are you referring the query inside the function definition. I think you should first map the jquery defined into the function declaration like below

  define(["jquery"], function($) {

Secondly, what is the () doing after the calling function?

if (target.hasClass === "call"){
   functionCall()();
}

Remove the trailing () from that call. It should just be functionCall();

Upvotes: 0

Louis
Louis

Reputation: 151511

Unless my eyes deceive me the simplest change to make to your code would be to replace this:

functionCall()();

with this:

call();

since the function that the main module returns is imported as call in your events module, because that's how you name it in the callback passed to define.

Upvotes: 0

Nazar Harasym
Nazar Harasym

Reputation: 43

One way is to add this code where you need to make call to function: require('pathToModuleOrModuleName').functionYouWantToCall()

But if you have module defined or required in the beggining (as 'main' in the events), then in place where call to function needed just add:

call.functionName();

Upvotes: 0

Related Questions