将变量从.CTP视图设置为.J

时间:2016-12-20 08:18:50

标签: javascript php html cakephp

我有一个非常讨厌和无意义的问题,你准备好了吗? :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'];
     }
    

非常感谢你们,我希望上面的信息足够了。

1 个答案:

答案 0 :(得分:0)

我正在更新此帖子以解决问题&#39;张贴在上面。

上面的代码没问题。 $ this-&gt; Js-&gt;设置.. $ this-&gt; Js-&gt; writeBuffer < / strong>是将.CTP中的变量直接设置为.JS作为全局变量的正确方法(它将在window.app中设置)

问题是由用户插入的数据引起的。他推了一些&#39;没有在DB表的某一列中关闭它,而是将内容直接呈现到HTML DOM元素中,因此它会破坏接下来的所有内容......

为了这个误会而烦恼:)