Search code examples
javascriptjqueryrevealing-module-pattern

reaching the btn event outside the revealing patterned applied class


I have an revealing patterned applied class.How can I reach btnMenu event outside of the model thanks.

MyModel= (function () {     
    var btnClickEvents = function () {     
        var btnMenu = $('.btnMenu').on('click', function () {
            var date=  $(this).attr("data-rezerve-date");
            var statu= $(this).attr("data-rezerve-statu");
            alert("click"+date+'---'+statu);
        });    
    };
    return {
        initialize: initialize,
        asignValues: asignValues,
        getRezervationDateAndStatus: btnClickEvents.btnMenu//how can I reach this function outside of model    
    };
})();

update I change my code as u show.and add one return function

MyModel = (function () {
    var dt = "";
    var statu = "";
    var rvalue = {};
    var btnClickEvents = function () {
        $('.btnMenu').on('click', onBtnMenuClick);
    };

    function onBtnMenuClick(e) {
         dt = $(this).attr("data-rezerve-date");
         statu = $(this).attr("data-rezerve-statu");
         rvalue.date = dt;
         rvalue.statu = statu;
         console.log(dt);
    }
    var getRezervationDateAndStatus = function () {

        return rvalue;
    };
    return {
        initialize: initialize,
        asignValues: asignValues,

        getRezervationDateAndStatus: getRezervationDateAndStatus
    };
})();

and after include my module to my web page calling is like this,

MyModel.asignValues(rezervasyonTable,data);
    MyModel.initialize();
    var result = MyModel.getRezervationDateAndStatus();
    console.log(result.date);

bu console log empty.


Solution

  • As you say it is a " revealing" pattern. You could see what you expose. To be able to use this function outside of the module change your code like this:

    MyModel = (function () {
        var btnClickEvents = function () {
            $('.btnMenu').on('click', onBtnMenuClick);
        };
    
        function onBtnMenuClick(e) {
            var date = $(this).attr("data-rezerve-date");
            var statu = $(this).attr("data-rezerve-statu");
            alert("click" + date + '---' + statu);
        }
    
        return {
            initialize: initialize,
            asignValues: asignValues,
            getRezervationDateAndStatus: onBtnMenuClick
        };
    })();