我有一个非常讨厌和无意义的问题,你准备好了吗? :x
好的,让我们走吧:
Actualy我有一个特定的软件部署到4个环境:开发,认证,预生产和生产。
昨天我在生产环境中收到了错误报告。
当我尝试将我的.ctp中的javascript变量设置为我的.js时,我的.js无法访问该变量,因此设置了'没有完成。奇怪的是,在其他环境中(DES,CERT和PRE)可以完美地运行但在PRO中(对于某种语言,它会失败)。
草拟问题:
translate.ctp
<?php
$translations = array();
$translations['NO_DATA']=__('NODATA');
$translations['VALUE']=__('VAL');
$translations['WEBROOT'] = $this->webroot;
$this->Js->set('translations',$translations); // <-- prepare 'translations' into JS as window.app.translations
echo $this->Js->writeBuffer(array('onDomReady' => false)); // sets the variable 'translations' into the javascript (I only use writeBuffer once in this code and project)
?>
default.thtml中
...标题,脚本加载和东西......
<?php echo $this->element('translate');?> // loads translations ctp
<?php echo $this->fetch('script'); ?>
main.js
$(document).ready(function() {
// window.app doesn't exists so the following instruction will trigger an error:
var translatedNoData = window.app.translations['NO_DATA'];
}
非常感谢你们,我希望上面的信息足够了。
答案 0 :(得分:0)
我正在更新此帖子以解决问题&#39;张贴在上面。
上面的代码没问题。 $ this-&gt; Js-&gt;设置.. 和 $ this-&gt; Js-&gt; writeBuffer < / strong>是将.CTP中的变量直接设置为.JS作为全局变量的正确方法(它将在window.app中设置)
问题是由用户插入的数据引起的。他推了一些&#39;没有在DB表的某一列中关闭它,而是将内容直接呈现到HTML DOM元素中,因此它会破坏接下来的所有内容......
为了这个误会而烦恼:)