2010-10-08 62 views
1

我使用JS帮手蛋糕1.3和由于需要在noConflict模式下使用jQuery,我必须设置这个每一个观点:CakePHP JS Helper:如何在视图外设置jQueryObject var?

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

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

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

谢谢!

回答

2

我如何解决它:

我创建了下面的代码我自己的JS引擎助手(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

在没有打破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,我不知道是否会导致任何问题重新命名类(因为你将不得不在子类时)。

+0

感谢您的回复,这让我有了一个更好的想法::请参阅下面的解决方案。 – Soulriser 2010-10-10 06:59:17

+0

@saturn不是一个更好的主意,这是我在PS中写的主意...... :)很高兴它工作,很高兴知道。 – deceze 2010-10-10 08:00:09

+0

是的,你确实!我发誓,我独立提出了这个问题,这只是表明伟大的思想观点。再次感谢。 – Soulriser 2010-10-10 17:40:05

0

为什么不在你的布局中做到这一点?这应该向你提供所有的观点。只要确保设定将低于

print $scripts_for_layout;

,这样的jquery.js会被加载。

+0

我的确想到了这一点,但我忘记提及的是我的意见是通过ajax调用的。 Js类的属性需要在写入Js缓冲区之前设置,在我的情况下,这是在包含布局之前发生的,因此将该语句添加到布局文件(默认或ajax)不起作用。 – Soulriser 2010-10-10 06:54:37