CakePHP JS Helper: Как установить переменную jQueryObject вне поля зрения? - PullRequest
1 голос
/ 08 октября 2010

Я использую помощник JS в Cake 1.3, и из-за необходимости использовать jQuery в режиме noConflict, я должен установить это в каждом представлении:

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

У меня естьМНОЖЕСТВО представлений, которые полагаются на это, и я хотел бы избежать необходимости вводить эту строку в верхней части каждого представления, которое нуждается в этом.Я попытался установить переменную jQueryObject в моем файле app_controller.php, но это не сработало.Я бы предпочел не взламывать основной файл jquery_engine.php.

Есть ли способ установить глобальную переменную jQueryObject из моего приложения?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 октября 2010

Как я это решил:

Я создал свой собственный помощник 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 голос
/ 08 октября 2010

Вероятно, нет способа установить значение по умолчанию "внешне" без нарушения ограничений 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 голосов
/ 09 октября 2010

Почему бы не сделать это в вашем макете?Это должно распространяться на все ваши взгляды.Просто убедитесь, что настройка будет ниже

print $scripts_for_layout;

, чтобы загружался файл jquery.js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...