0

基本的に、入力ボックスの keyUp メソッド内に変数を作成して、smarty ループからデータを取得します (これは、$(document.ready)

ここにコードがあります

{section name=unitEl loop=$allNavies}
    $("#attack-navy{$allNavies[unitEl].ID}-number").keyup(function(){
        var unit = {$allNavies[unitEl]};
        var element = $("#attack-navy" + unit.ID + "-number");
        var available_count = {$NAVY_{$allNavies[unitEl].ID}_AVAILABLE_COUNT|default:'0'};
        alert(unit.ID);
        // Unit max = available count
        if(element.val() > available_count)
        {
            completeUnitValue(element, available_count);
        }
        // If transport navy: Increase capacity
        if({$allNavies[unitEl].ID} == 16 || {$allNavies[unitEl].ID} == 19 || {$allNavies[unitEl].ID} == 20)
        {
            $("#attack-max-capacity").text(getMaxCapacity());
        }
    });
{/section}

{$allNavies[unitEl]}問題は、変数 (unit、element、available_count) のいずれかを警告すると undefined が表示されますが、変数の代わりにsmarty を使用すると、すべて正常に動作することです。コードを読みやすくするために変数を作成しました。

理由を知っている人はいますか?

4

1 に答える 1

0

あなたがしていることを「smarvascript」と呼んでいます。私はそれを嫌い、同僚にそれを避けるように頼みます. しかし、それから、私はSmartyを完全に嫌うので、そこに行きます.

この行:

var unit = {$allNavies[unitEl]};

PHP の値を JS 変数に割り当てます。

この行:

alert(unit.ID);

「ユニット」がプロパティを持つオブジェクトであると信じているように見えます。PHP オブジェクトを JS オブジェクトに直接割り当てて、それが機能することを期待することはできません...

どのようにすべきかを説明するために、PHPコードとデータ構造のいくつかを見る必要がありますが、これが役立つ可能性があります

var unit = {$allNavies[unitEl]|json_encode};

または、$allNavies[unitEl] が配列の場合:

var unit = {$allNavies[unitEl]|@json_encode};

$allNavies の構造を知っていれば、おそらく最も役に立ちます。

また、私は興味があります... JS 中括弧が Smarty を狂わせないようにするための {literal} マークはどこにありますか?

編集:

これは、Smarty を JS に挿入することを余儀なくされたときに使用するのが好きなちょっとしたトリックです。

//{literal}
( function( allNavies )
{
    /*
      allNavies is now a JS object and you can work purely with JS in here
     */
}(
    //{/literal}
    {$allNavies|@json_encode}
    //{literal}
) );
//{/literal}
于 2011-03-11T19:29:59.453 に答える