2016-12-20 3 views
2

Ich habe ein extrem nerviges und un-sinnliches Problem, bist du vorbereitet? : XVariable von .CTP-Ansicht auf .JS setzen

Ok, gehen wir:

Actualy Ich habe eine bestimmte Software in 4 Umgebungen eingesetzt: Entwicklung, Zertifizierung, Vorproduktion und Produktion.

Gestern habe ich einen Fehlerbericht in der Produktionsumgebung erhalten.

Thing ist, wenn ich versuche, eine Javascript-Variable von meinem .ctp zu meinem .js zu setzen, kann meine .js nicht auf diese Variable zugreifen, so dass der "Satz" nicht getan wird. Das Seltsame ist, dass das in anderen Umgebungen (DES, CERT und PRE) perfekt funktioniert, aber in PRO (für eine gewisse Kasuistik versagt es).

Sketching das Problem:

  • 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.ctp

... Header, Skript lädt und so ...

<?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']; 
    } 
    

Vielen Dank Jungs, ich die Informationen über Hoffnung ist genug.

Antwort

0

Ich aktualisiere diesen Beitrag, um das 'Problem' zu lösen, das oben gepostet wurde.

Der obige Code ist in Ordnung.$ this-> Js-> set .. und $ this-> Js-> writeBuffer sind die korrekte Methode, um eine Variable von .CTP direkt in die .JS als globale Variable zu setzen (sie wird im Inneren gesetzt window.app)

Problem wurde durch Daten verursacht, die vom Benutzer eingefügt wurden. Er putte etwas 'ohne es in eine bestimmte Spalte aus DB-Tabelle zu schließen, der Inhalt wurde direkt in ein HTML-DOM-Element gerendert, so zertrümmerte es alles, was als nächstes kam ...

Sry für das Missverständnis :)