Zend表单元素与Javascript - 装饰器,视图助手或查看脚本?

时间:2011-09-19 09:01:59

标签: zend-framework zend-form zend-form-element

我想在Zend_Form_Element_Text中添加一些javacsript。

起初我认为装饰器是最好的方法,但由于它只是一个脚本(标记没有改变),那么视图助手可能更好吗?还是一个视图脚本?

似乎它们都是出于同一目的(关于表单元素)。

我要添加的javascript不是事件(例如更改,点击等)。我可以使用headScript()轻松添加它,但我希望它可以重复使用,这就是我想到装饰器/视图助手的原因。我不清楚它们之间的区别。

在这种情况下,最佳做法是什么?优点

更新:似乎最好的做法是使用视图脚本中的视图帮助器,因此装饰器会更合适吗?

感谢。

4 个答案:

答案 0 :(得分:2)

使用setAttrib函数。

例如: -

$element = new Zend_Form_Element_Text('test');
$element->setAttrib('onclick', 'alert("Test")');

答案 1 :(得分:2)

您可以通过扩展Zend_From_Decorator_Abstract并使用render()方法生成代码段来创建自己的装饰器:

class My_Decorator_FieldInitializer extends Zend_Form_Decorator_Abstract {
    public function render($content){

        $separator = $this->getSeparator();
        $element = $this->getElement();

        $output = '<script>'.
             //you write your js snippet here, using 
             //the data you have in $element if you need 
             .'</script>';

        return $content . $separator . $output;
    }
}

如果您需要更多详细信息,请在评论中提出,我将编辑此答案。我没有测试这段代码。

答案 2 :(得分:2)

我实际上并没有看到这需要装饰器或视图助手或视图脚本。

如果我想将一些客户端行为附加到表单元素,我可能会设置一个带有$elt->setAttrib('class', 'someClass')$elt->setAttrib('id', 'someId')的属性,我的脚本可以附加一些钩子。然后我会为这些目标元素添加侦听器/处理程序。

例如,对于使用jQuery的单击处理程序,它将类似于:

(function($){
    $(document).ready(function(){
        $('.someClass').click(function(e){
            // handle the event here
        });
    });
})(jQuery);

好处是它不引人注目,因此标记保持清洁。希望javascript是一种增强功能 - 不是功能的关键部分 - 因此它会优雅地降级。

也许你的意思是这个javascript片段本身需要可以在不同的元素标识符中重用 - someClass,在本例中。在这种情况下,您可以简单地编写一个视图助手,它接受CSS类名作为参数。

答案 3 :(得分:1)

“标记不会改变”,Yap,

但我想添加一些javascript函数抛出ZendForm元素:

$text_f = new Zend_Form_Element_Text("text_id");
$text_f->setAttrib('OnChange', 'someFunction($(this));');

最好的方法是,如果您与团队合作,所有人都应该使用相同的代码标准。对我和我的团队来说,这是上面的代码。