2015-05-30 9 views
8

Ich versuche, einige Javascript mit Smarty und JavaScript-Variable zu verwenden und zu überprüfen, ob der Wert in einem Smarty-Array enthalten ist.Javascript Variable und Smarty

Unten finden Sie den Code, den ich

if (object.data[i].Application === selectedApplication || {if isset($Applications) && $Applications|@count > 0} true {else} false {/if}) 
{ 
    {if not isset($Applications)} 
     $("#cboApplications").append("<option selected value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
    {else} 
     {if '9'|in_array:$Applications} 
     console.log("id " + id + " in array"); 
     $("#cboApplications").append("<option selected value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
    {else} 
     console.log("id " + id + " not in array"); 
     $("#cboApplications").append("<option value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
    {/if} 
{/if} 
} 

Das Problem das ich habe, mit ist {if '9'|in_array:$Applications} haben. Im Moment habe ich den Wert fest programmiert, anstatt die Javascript-Variable als Test zu verwenden, aber ich bekomme die gleichen Ergebnisse.

Unten ist das, was die Anordnung so aussieht, wenn von innen smarty gedruckten

array (
    0 => '9', 
) 

Es gibt mehrere Werte in diesem Listenfeld cboApplications, die einen Wert von 8 haben, 5, 6, 9 und 10

Aus irgendeinem Grund, obwohl nur 9 im $ Applications-Array ist, verhält sich die console.log so, als wäre jedes einzelne Element innerhalb des Arrays, nicht nur 9.

Vielen Dank für jede Hilfe, die Sie zur Verfügung stellen können.

Antwort

2

Sie müssen {literal} in Smarty für JavaScript verwenden. Beispiel:

{literal} 
<script type="text/javascript"> 
    document.write("{/literal}{$text}{literal}"); 
</script> 
{/literal} 

Weitere Informationen finden Sie Smarty Documentation.

+0

Dies wurde in Smarty 3, solange die nicht-Smarty geschweiften Klammern verbesserte sich um weißen Raum umgeben sind: http://www.smarty.net/docs/en/language.function.literal.tpl –

+0

@ JohnMcMahon: Sorry, habe die falsche URL von Google :-D hat meinen Beitrag bearbeitet. – Richard

+0

Dies kann sehr gut sein Problem sein, wenn er Smarty 2 verwendet. –

2

Sie überprüfen immer, ob 9 im $Applications Array ist, also geht es immer, weil wir wissen, dass 9 im Array ist.

Können Sie den tatsächlichen Code, der die Variable stattdessen 9 überprüft? Denken Sie auch daran, dass der Smarty-Code auf dem Server ausgeführt wird, während das JavaScript nicht funktioniert. Ich kann mir also nicht wirklich vorstellen, was Sie erreichen wollen. Der tatsächliche Code könnte helfen.

2

Können Sie vielleicht so etwas wie diese versuchen:

if (object.data[i].Application === selectedApplication || {if isset($Applications) && $Applications|@count > 0} true {else} false {/if}) 
{ 
{if not isset($Applications)} 
    $("#cboApplications").append("<option selected value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
{else} 
    {if $Applications.indexOf('9') != -1} 
    console.log("id " + id + " in array"); 
    $("#cboApplications").append("<option selected value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
{else} 
    console.log("id " + id + " not in array"); 
    $("#cboApplications").append("<option value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
{/if} 
{/if} 

}

I ersetzt InArray mit Javascript indexOf, so vielleicht die helfen können.

2
<script> 
var apps = []; 

{if isset($Applications)} 
apps = {$Applications|json_encode}; 
{/if} 

if($.inArray(9, apps)) { 
    console.log('....'); 
} 
</script>