У вас есть несколько вариантов:
1) Код внутри песочниц YUI имеет доступ к переменным вне песочницы, поэтому просто храните данные где-нибудь и ссылайтесь на них внутри кода своей песочницы.Это работает только с данными, а не с вызовами методов.
Обратите внимание, что это не требует каких-либо уведомлений, поэтому код в изолированной программной среде YUI должен знать, когда данные доступны.
// PHP
print '<script>YUI.namespace('Env.MyApp.data').currencyRates = ' . json_encode($currencyRates) . ';</script>';
// YUI (inside the YUI().use() callback)
var currencyData = YUI.Env.MyApp.data.currencyData;
Технически, при таком подходе вы можете разместить данные в любом месте, доступном для всего мира, и это будет работать.
2) Используйте совместно используемую глобальную EventTarget Y.Global (она же YUI.Env.globalEvents) для трансляциисообщение, полученное по подписке на события внутри вашей песочницы.
Это позволяет получить ответ функции на добавление данных на страницу, но не работает, если PHP генерирует данные валюты при построенииразметка для страницы, потому что это условие неудавшейся гонки.
// PHP
print "<script>YUI.Env.globalEvents.fire('myapp:data', { currencyRates: " . json_encode($currencyRates) . " });</script>";
// YUI
Y.Global.on('myapp:data', function (e) {
// the data is in e.currencyRates
});
3) Если данные предназначены для статической доставки и PHP добавляет их во время сборки страницы перед вызовом YUI (), просто обернитеэто в модуле и использовать () его.
// PHP
print "<script>YUI.add('myapp-currency-rates', function (Y) { Y.namespace('MyApp.data').currencyRates = " . json_encode($currencyRates) . "; });</script>";
// YUI
YUI().use('myapp-currency-rates', … function (Y) {
// the data is in Y.MyApp.data.currencyRates
});
И у вас есть другие варианты в зависимости от времени передачи данных и отношения бмежду страницей и php, доставляющим данные.Зайдите на #yui на freenode в течение недели, и найдется много людей, которые помогут найти лучшее решение для вас.