Почему мой класс не определен во время выполнения. Шаблон модуля Javascript

Когда я запускаю свое приложение, я получаю: «Uncaught TypeError: Cannot read property 'init' of undefined». Запускается предупреждение в функции готовности документа, поэтому я знаю, что jQuery загружается в этот момент. Но я не знаю, почему Task не определен.

Это в приложении MVC5 и работает jQuery 1.10.2.

Помогите пожалуйста, jsFiddle работает нормально, а JsHint ошибок не показывает.

    var Task = (function () {

    var initialize = function () {
        console.log($);
        bindEvents();
    };
    var postFilter = function () {
        console.log("clicked");
        var postData = {
            UserID: $('#user_select').val,
            TaskTypeID: $('#taskTypeSelect').val,
            TaskStatusID: $('#status_select').val,
            PriorityID: $('#priority_select').val
        };

        $.ajax({
            url: "/Tasks/_AllTaskView",
            data: postData,
            success: function (response) {
                $('#results').html(response);
            }

        });
    };

    var bindEvents = function () {
        $('#submit_filter').on('click', postFilter);
    };

    return
    {
        init : initialize

    };

})();

$(document).ready(function () {
    alert()
    Task.init();
});

person Gweaths    schedule 11.12.2014    source источник
comment
Я голосую просто потому, что понятия не имел, что return не позволяет своему значению начинаться в последующих строках (о чем должен знать каждый кодировщик JS) :)   -  person Gone Coding    schedule 11.12.2014


Ответы (2)


Поместите фигурную скобку вашего return в ту же строку, что и return.

Вместо:

return
{
    init : initialize

};

Сделай это:

return {
    init : initialize
};

В JavaScript есть автоматическая вставка точки с запятой, которая автоматически завершает оператор return до того, как он попадет в фигурную скобку.

person Mike    schedule 11.12.2014
comment
Мой плохой (тупой непоследовательный язык... дайте мне C # в любой день) - комментарий удален. Эй, это поощрило 3 других голоса... не жалуйтесь :) - person Gone Coding; 11.12.2014
comment
В качестве совершенно бесполезного примечания, это тоже работает: jsfiddle.net/3s6n4d5y/2 - person A. Wolff; 11.12.2014

Вот попробуйте это:

return{ init : function(){
                 initialize();
               }
      }
person SilentTremor    schedule 11.12.2014