我在Cake 1.3中使用JS助手,由于需要在noConflict模式下使用jQuery,我必须在每个视图中设置它:
$this->Js->JqueryEngine->jQueryObject = 'jQuery';
我有很多依赖于此的视图,我希望避免在每个需要它的视图的顶部输入这一行。我尝试在我的app_controller.php文件中设置jQueryObject var,但它不起作用。我宁愿不破解核心jquery_engine.php文件。
有没有办法在我的应用程序中全局设置jQueryObject var?
谢谢!
答案 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。