CakePHP JS Helper:如何在视图外设置jQueryObject var?

时间:2010-10-08 05:51:28

标签: php jquery cakephp

我在Cake 1.3中使用JS助手,由于需要在noConflict模式下使用jQuery,我必须在每个视图中设置它:

$this->Js->JqueryEngine->jQueryObject = 'jQuery';

我有很多依赖于此的视图,我希望避免在每个需要它的视图的顶部输入这一行。我尝试在我的app_controller.php文件中设置jQueryObject var,但它不起作用。我宁愿不破解核心jquery_engine.php文件。

有没有办法在我的应用程序中全局设置jQueryObject var?

谢谢!

3 个答案:

答案 0 :(得分:2)

我是如何解决的:

我使用以下代码创建了自己的Js Engine助手(views/helpers/my_jquery_engine.php):

App::import('Helper', 'JqueryEngine');

class MyJqueryEngineHelper extends JqueryEngineHelper {
    var $jQueryObject = 'jQuery';

}

然后在我的app_controller中,我说:var $helpers = array('Js' => array('MyJquery'));就像一个魅力。

答案 1 :(得分:1)

在不破坏MVC约束的情况下,可能无法在外部设置默认值。您可以简单地将JsHelper子类化并在内部自定义

/app/views/helpers/my_js.php

App::import('Helper', 'Js');

class MyJsHelper extends JsHelper {

    public function __construct($settings = array()) {
        parent::construct($settings);
        $this->JqueryEngine->jQueryObject = 'jQuery';
    }

}

这意味着您必须将$this->Js的每个实例更改为$this->MyJs,否则不应该成为问题。

(未经测试的解决方案,因为我从未接触过JsHelper,但你明白了......)


PS:您也可以直接对JqueryEngineHelper进行简单的子类化,用var $jQueryObject = '$';覆盖var $jQueryObject = 'jQuery';。尽管如此,由于我从未接触过JsHelper,我不知道是否会导致重命名该类的任何问题(因为在子类化时你将不得不这样做。)

答案 2 :(得分:0)

为什么不在你的布局中这样做?这应该传播到你的所有观点。只需确保设置低于

print $scripts_for_layout;

以便可以加载jquery.js。