Использование пространств имен javascript с ruby ​​и sinatra - PullRequest
0 голосов
/ 10 апреля 2011

Я пытаюсь создать некоторую проверку javascript для своего веб-приложения, и все идет довольно хорошо, за исключением того, что я не хочу, чтобы мой скрипт постоянно что-то проверял.

Допустим, у меня есть две вещи, которые я хочу проверить, но они не появляются на одной странице. Они на '/page1' и 'page2', и я не хочу, чтобы мой валидатор для страницы 1 работал на странице 2.

Это должно быть возможно с помощью литералов объекта, верно? Примерно так:

var validations = 
{
    page1validation :
    {
        init : function()
        {
            // validation page 1
        }
    }
    page2validation :
    {
        init : function()
        {
            // validation page 2
        }
    }
}

Так что мне нужно вызвать эти методы проверки, например validations.page1validation.init(), и я думаю, что я мог бы сделать это с помощью встроенного JavaScript в каждом представлении haml, где у меня есть форма, которая нуждается в проверке.

%form{:action => ""}
  %input{:type => "text"}
  %input{:type => "submit", :value => "save"}
:javascript
  $(function() {
    validations.page1validation.init();
  });

Но должно быть лучшее решение - я просто не могу придумать одно прямо сейчас. Так что бы вы сделали, чтобы убедиться, что валидатор не пытается все время проверять?

О, и встроенный javascript не будет работать, если я положу javascript внизу в файле макета ...

1 Ответ

0 голосов
/ 10 апреля 2011

Самый простой способ сделать то, что вы хотите, это сделать формы разными, либо с другим идентификатором, либо с классом.

Тогда ваши проверки могут использовать это различие, чтобы «нацеливать» каждую форму независимо.Вам не нужно дополнительное «пространство имен» при таком подходе.Вместо этого вы делаете что-то вроде этого.

$(function() {
  page1validation();
  page2validation();
});

function page1validation() {
  var form = getElementById('form1'); // form1 is the first form
  if(!form) then return;

  // .. perform validations in form 1
}
function page2validation() {
  var form = getElementById('form2');
  if(!form) then return;

  // .. perform validations in form 2
}

Кроме того, я бы посоветовал вам потратить некоторое время на изучение библиотеки js, такой как jQuery .Он предоставляет несколько встроенных методов, которые сделают код выше намного меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...