2017-11-02 8 views
-1

11要素のPHP配列をtwig経由でjavascriptに渡していて、うまくいきます。配列のいくつかの要素はnullであり、いくつかは多次元配列です。これは私のjsのコードです:Symfony 3 - 枝の資産に渡すJavaScript変数

var slot = {{ slot|json_encode|raw }}; 

     for(var i = 1; i<= 11; i++) { 

      if (slot[i - 1] === null) { 
       document.getElementById("slot_" + i).style.backgroundImage = "url('{{ asset('grafiki/empty.jpg') }}')"; 
      } 
      else { 
       document.getElementById("slot_" + i).style.backgroundImage = "url('{{ asset('grafiki/' ~ slot[1].name ~ '.jpg') }}')"; 
      } 
     } 

あなたが見ることができるように、私のスクリプトは、特定のIDを持つHTML要素の背景画像を変更され、それが正常に動作します。 問題は、私は変更する必要があることです。~ slot[i-1].name ~~ slot[1].name ~を、その後symfonyはエラーがスローされます:

Variable "i" does not exist. 

しかし、私はconsole.log(slot[i-1].name)に行全体を変更すると、それは完全にオブジェクトのnameプロパティを示しています。

私はまた、変数に割り当てる値を試してみましたが、その後、資産に渡し:

var name = slot[i-1].name; 
document.getElementById("slot_" + i).style.backgroundImage = "url('{{ asset('grafiki/' ~ name ~ '.jpg') }}')"; 

しかし、その後、私はエラーだ:Variable "name" does not exist. を私は本当に、このいずれかにこだわって誰が私を助けることができますか?

+1

Javascript変数は表側にあります。 Twigはバックエンドで解析されています。彼らは同じ文脈に存在しません。 – dmnptr

+0

次に、slot [1] .nameがなぜ機能するのですか?これはjavascript変数でもあります。 – Petrus

+1

二重の中括弧の中のjavascript変数ではありません。 twig変数 'slot'を持っていますか? – dmnptr

答えて

0

Ajaxは、スロット変数の別のエンドポイントを要求します。このエンドポイントはSlots json形式を返し、この変数を使用することができます。

+0

私は知っているが、私はデータベースクエリを避けたい。 asset()を介して画像に到達する別の方法はありますか? – Petrus

+0

あなたのバックエンドのスロットのクエリを書いています。あなただけがAjaxリクエストのエンドポイントにクエリコードを移動する必要があります。 –

+0

ナー、私は単にasset()関数をあきらめ、代わりに正確なディレクトリ/my_project/web/grafiki/item.jpgとjavascriptの連結を使用します。それはうまく動作します。とにかくあなたの努力に感謝します。 – Petrus

関連する問題