代码之家  ›  专栏  ›  技术社区  ›  Roalt

根据Zend框架为自动完成提供额外参数

  •  3
  • Roalt  · 技术社区  · 17 年前

    我有一个包含(至少)以下两个字段的表单:

    • 国家
    • 俱乐部

    俱乐部是通过 Zendx_jquery_form_element_autocomplete 元素,它还生成以下javascript代码:

    $("#club").autocomplete({"url":"\/mywebsite\/\/mycontroller\/autocomplete"});
    

    我有每个国家的俱乐部数据库。我想要的是 只有俱乐部返回给(用户)指定的国家 . 这个列表应该通过远程(Ajax)调用来检索。代码是:

     public function autocompleteAction()
        {
            $request = $this->getRequest();
    
            $filter = $request->getParam('q');
            $country = $request->getParam('country');
    
            $clublist = getClubListBySubstring($country, $filter);
    
            $this->_helper->autoComplete($clublist);
        }
    

    我可以通过传递zendx_jquery_form_element_autocomplete所完成的生成,并向被解释为参数的url添加一个额外的元素,来更改上述javascript代码。 国家 .

    但是否有更优雅的解决方案?我读过一些关于ExtraParams的东西,能用吗?怎么用?

    1 回复  |  直到 17 年前
        1
  •  4
  •   karim79    17 年前

    这是使用服务器生成JavaScript可能会对您不利的“灰色区域”之一。自己编写客户端脚本在很多方面对您都有好处:

    • 您将进一步了解jquery自动完成以及可以使用它做什么。
    • 您可以更好地控制自动完成器的行为。
    • 您的解决方案将更少地依赖Zend框架,因此更易于移植。

    我会熟悉 addition parameters on the jQuery side of things ,在看之前 ZendX_JQuery_Form_Element_AutoComplete 作为端到端解决方案。此外,如果您还没有阅读Joel Spolsky写的题为“泄漏抽象法则”的文章,那么您可能还需要阅读以下文章:

    http://www.joelonsoftware.com/articles/LeakyAbstractions.html

    我已经实现了一个自动完成器(绑定到ZF控制器操作),并且完全知道ZF的自动完成助手的存在,但是我选择不使用它,因为我不想处于这样一种情况中:应用一个小的调整将需要放弃整个解决方案,因为服务器上的代码生成工具不想播放。

    希望这比烦人更有帮助。