Я называю то, что ты делаешь, "smarvascript". Я ненавижу это и прошу моих коллег избегать этого. Но тогда я вообще ненавижу Смарти, так что иди.
Эта строка:
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 разбудить Смарти?
Edit:
Вот небольшой трюк, который мне нравится использовать, когда меня заставляют вводить 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}