我想在Zend_Form_Element_Text中添加一些javacsript。
起初我认为装饰器是最好的方法,但由于它只是一个脚本(标记没有改变),那么视图助手可能更好吗?还是一个视图脚本?
似乎它们都是出于同一目的(关于表单元素)。
我要添加的javascript不是事件(例如更改,点击等)。我可以使用headScript()轻松添加它,但我希望它可以重复使用,这就是我想到装饰器/视图助手的原因。我不清楚它们之间的区别。
在这种情况下,最佳做法是什么?优点
更新:似乎最好的做法是使用视图脚本中的视图帮助器,因此装饰器会更合适吗?
感谢。
答案 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));');
最好的方法是,如果您与团队合作,所有人都应该使用相同的代码标准。对我和我的团队来说,这是上面的代码。