Как использовать JavaScript в формах? - PullRequest
1 голос
/ 12 июля 2010

Как добавить свой собственный JavaScript в формы, сгенерированные Doctrine?

Например, где я могу добавить скрипт onFocus в форму ввода, сгенерированную Symfony?

Редактировать:

@ Benoit:

Я пробовал ваш метод, но он не работает.

Моя функция renderJavascript:

public function renderJavascript() {
  $(function() {
    $('.form').focus(function(){this.blur()});
});

И я переопределил метод render, как вы показываете, но ошибки нет, но она ничего не делает.

Я думаю, что это небольшая ошибка, но я начинаю с symfony и не все понимаю вформы.

Ответы [ 3 ]

1 голос
/ 12 июля 2010

Вы должны расширить свой класс формы (который уже должен быть производным от sfForm), чтобы переопределить метод render.

Начиная с symfony 1.4 класс sfForm не имеет метода renderJavascript.Обычно мы используем для всех наших форм и виджетов базовый класс, который определит этот метод и переопределит метод рендеринга

class abstractOurForm extends sfFormDoctrine
{
    public function render($attributes = array())
    {
       return parent::render($attributes).
               '<script type="text/javascript">'.$this->renderJavascript().'</script>';
    }
    public function renderJavascript()
    {
        //nothing here
    }
}

Это добавит тег javascript в конец вашей формы (если он отображается как сгенерированный с помощью echo $form)

Когда вы переопределяете форму доктрины для реализации функциональности javascript, тесно связанной с формой html (встроенная проверка, интеграция ajax, динамические элементы управления и т. Д.), Просто сделайте что-то вроде этого:

class myWhateverForm extends abstractOurForm
{
    public function configure()
    {
         //your widget & validators config here
    }
    public function renderJavascript() 
    {
         //here come the JS code
         $js = <<<EOT
             //example with jquery
             $(function() {
                $('#myElement').focus(function(){
                   if (window.console) console.log('you\'ve done it');
                });
             });

    EOT;
       return $js;
    }
}

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

Надеюсь, это поможет вам!

1 голос
/ 12 июля 2010

Вы можете передать атрибуты html методу рендеринга в форме:

<?php echo $form["field_name"]->render(array("onfocus" => "alert('focused!');")) ?>

Вы также можете установить атрибут «класс» в массиве параметров и использовать jQuery для добавления JavaScript в поле.

0 голосов
/ 13 июля 2010

Правильный способ сделать это - создать отдельный файл .js и включить его непосредственно в ваше представление, чтобы он по-прежнему следовал шаблону MVC.

jQuery может получить ваше поле формы просто как формуFramework дает каждому полю уникальный идентификатор, который может использоваться jQuery в вашем файле .js для установки .focus или чего угодно.

Держите его в чистоте и легко поддерживайте каждый слой вашего приложения :)

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