【问题标题】:Zend Form Element with Javascript - Decorator, View Helper or View Script?Zend Form Element with Javascript - 装饰器、视图助手或视图脚本?
【发布时间】:2011-09-19 09:01:58
【问题描述】:

我想向 Zend_Form_Element_Text 添加一些 javacsript。

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

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

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

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

更新:似乎最好的做法是使用视图脚本中的视图助手,所以装饰器会更合适?

谢谢。

【问题讨论】:

  • 我不太明白您想要达到的目标。您会将什么 js 放入未通过事件链接的元素中?我了解您正在尝试制作可重复使用的东西,而装饰器是最好的选择。但是装饰者会在 ou 前后添加一些东西,而不是在字段中。你想在你的<input.. 之后将一些js 放在<script> 标记中吗?
  • 这是一个 jquery sn-p,它将初始化该字段。

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


【解决方案1】:

您可以通过扩展 Zend_From_Decorator_Abstract 创建自己的装饰器,并在其 render() 方法中生成您的 sn-p:

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】:

    使用 setAttrib 函数。

    例如:-

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

    【讨论】:

    • 我的 javascript 代码不是一个事件,它将在头脚本中,但我想将其作为装饰器/视图助手,以便它可以重用。
    【解决方案3】:

    我实际上并没有看到它需要在哪里成为装饰器、视图助手或视图脚本。

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

    例如,对于使用 jQuery 的点击处理程序,它会是这样的:

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

    好处是它不引人注目,所以标记保持干净。希望 javascript 是一种增强功能——不是功能的关键部分——所以它可以优雅地降级。

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

    【讨论】:

    • 重点是我写了一个组件,它是 zend 对象和一个 javascript。我想把它交给我团队中的其他开发人员使用,所以我想让它自己处理脚本..
    • 根据您接受的答案,我现在明白您的意思了。很高兴您找到了解决方案。干杯!
    【解决方案4】:

    “标记没有改变”,Yap,

    但我喜欢添加一些 javascript 函数 throw ZendForm 元素:

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

    最好的方法是如果您与团队一起工作,那么你们所有人都应该使用相同的代码标准。对于我和我的团队来说,这就是上面的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 2011-08-31
      相关资源
      最近更新 更多