2014-02-13 5 views
1

Я борюсь с requirejs. У меня после JQuery проверки пользовательский модуль аддон определены:loading jquery validation using requirejs

валидация-addon.js

define(['jquery', 'jquery.validate', 'jquery.validate.unobtrusive'], 

function ($) { 

    $.validator.setDefaults({ 
     highlight: function (element) { 
      $(element).closest('.form-group').addClass('has-error'); 
     }, 
     unhighlight: function (element) { 
      $(element).closest('.form-group').removeClass('has-error'); 
     } 
    }); 

    .... 
}); 

Мои requirejs конфигурационный файл:

config.js

require.config({ 
    baseUrl: '/Scripts', 
    paths: { 
     'jquery': 'lib/jquery-2.0.3', 
     'jquery.validate': 'lib/jquery.validate', 
     'jquery.validate.unobtrusive': 'lib/jquery.validate.unobtrusive', 
    }, 
    shim: { 
     'jquery.validate': { 
      deps: ['jquery'] 
     }, 
     'jquery.validate.unobtrusive': { 
      deps: ['jquery.validate'] 
     } 
    } 
}); 

I Я использую эти модули в моем представлении регистрации пользователя mvc следующим образом:

register.cshtml

require(['/Scripts/modules/config.js'], function() { 
    require(['modules/user-register', 'modules/validation-addon'], 

    function (userregistration) { 
     //using user registration module here.. 
    } 

); 
}); 

Проблема я столкнулся немного странно. Когда я перехожу на регистрацию пользователя с первого раза и вводят неправильные значения в поля ввода ввода, чем пользовательские подсветка и unhighlight функции, которые я переопределил на валидаторе jquery, не выполняются, но если я перезагружу представление регистра, ,

Мое ощущение, что это происходит из-за последовательности загрузки модулей, но я не понимаю, как это решить, может ли кто-нибудь помочь мне решить эту проблему?

+0

Я предполагаю, что вы не используете оптимизатор (r.js возможен только в узле js) в вашем проекте .net. Вы должны называть свои модули. определяют ('ModuleName', [ 'dep1', 'DEP2'], функция (d1, d2) {...}); – KyorCode

+0

@KyorCode, но мои другие модули работают правильно и BTW из документации requirejs. Обычно лучше избегать кодирования в имени для модуля и просто позволить инструменту оптимизации записывать имена модулей. ', Но теперь я немного запутался , если я не использую r.js (инструмент оптимизации), а также не определяю имя для модулей, чем то, как работают другие модули, за исключением упомянутой выше проблемы? – gaurav

+1

@gaurav игнорировать предложение KyorCode. Он не имеет ничего общего с проблемой, с которой вы сталкиваетесь. – Louis

ответ

4

Похоже, вопрос времени. Такого рода вопрос иногда ясно, когда вы делаете перезагрузку, потому что порядок, в котором вещи инициализации зависит от того, что находится в кэше, и т.д.

Можно прямо сейчас, что jquery.validate.unobtrusive делает свою работу на DOM перед тем Кодекса который вызывает $.validator.setDefaults. Чтобы проверить, выполнено ли $.validator.setDefaults до jquery.validate.unobtrusive, удалите требование jquery.validate.unobtrusive от validation-addon.js и добавьте его в свой основной файл.

Изменить validation-addon.js на:

define(['jquery', 'jquery.validate'], 

function ($) { 

    $.validator.setDefaults({ 
     highlight: function (element) { 
      $(element).closest('.form-group').addClass('has-error'); 
     }, 
     unhighlight: function (element) { 
      $(element).closest('.form-group').removeClass('has-error'); 
     } 
    }); 

    .... 
}); 

И изменить register.cshtml к:

require(['/Scripts/modules/config.js'], function() { 
    require(['modules/user-register', 'modules/validation-addon', 'jquery.validate.unobtrusive'], 

    function (userregistration) { 
     //using user registration module here.. 
    } 

); 
}); 

Если это решит вашу проблему вы, вероятно, не хотите, чтобы код, как это, но это быстро и простой способ проверить, является ли это проблемой.

+0

Фактически я не вручную вызываю метод проверки в полях, я использовал атрибуты data- * во входных элементах (тегах), которые далее автоматически вызывают проверку, если пользователь вводит неправильное значение в поле ввода. – gaurav

+0

Да, это 'jquery.validate.unobtrusive', который выполняет эту работу. Он считывает данные - * attrubutes и присоединяет соответствующий обработчик с полем, и можете ли вы явно указать, какую часть кода вы хотите видеть? – gaurav

+0

проверить это http://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.js – gaurav

Смежные вопросы