JavaScript variable and Smarty


JavaScript variable and Smarty

我试图做一些JavaScript与Smarty和使用JavaScript变量和检查值是否包含在一个Smarty数组。

下面是我的代码:
    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}
}

我遇到的问题是{if '9'|in_array:$Applications}。目前,我已经硬编码的值,而不是使用JavaScript变量作为测试,但我得到相同的结果。

下面是Smarty内部打印的数组:

array (
  0 => '9',
)

列表框cboApplications中有多个值,它们的值分别为8,5,6,9和10。

由于某种原因,即使$Applications数组中只有9,console.log的行为就好像数组中有每个单独的项一样,而不仅仅是9。

您必须在Smarty中使用{literal} for JavaScript。例子:

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

更多信息请参见Smarty文档

你能不能试试这样:

  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}

}

我用javascript indexOf代替了inArray,所以也许这可以帮助。

您总是检查9是否在$Applications数组中,因此它总是通过,因为我们知道9在数组中。

你能提供检查变量的实际代码吗?还要记住,智能代码是在服务器上执行的,而JavaScript不是,所以我真的无法想象你想要实现什么。实际代码可能会有帮助。

<script>
var apps = [];
{if isset($Applications)}
apps = {$Applications|json_encode};
{/if}
if($.inArray(9, apps)) {
    console.log('....');
}
</script>