2010-07-12 4 views
1

Как добавить свой собственный JavaScript в формы, которые генерируются Doctrine?Как использовать JavaScript в формах?

Например, где можно добавить скрипт onFocus в форме ввода, сгенерированной symfony?

Edit:

@Benoit:

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

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

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

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

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

ответ

1

Вы можете передать HTML атрибуты метода визуализации на форме:

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

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

1

Вы должны расширить свой класс формы (который уже должен быть получен из 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 
    } 
} 

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

Когда переопределить форму доктрины для реализации functionnality яваскрипта плотно к форме 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-код является виджетами, он не должен повторяться в каждом классе формы, используя его.

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

+0

В моей форме, как я могу использовать renderJavascript, определенный в myClassForm? – Elorfin

+0

вы можете переопределить метод рендеринга (полезно, если вы используете «форму эха $ или порожденную краду»), или вы можете напрямую вызвать renderJavascript в своем шаблоне (если вы вручную кодируете HTML в шаблоне) – Benoit

0

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

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

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

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