2010-10-08 26 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