parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

firesanek 05.10.2006 16:36

сейчас еще раз все внимательно поизучал.. получилось вот что.
похоже действительно не правильно формируется хеш data

в каком месте возникает ошибка - я написал, но до этого есть еще вот что:
@shTree[id;data]
<script type="text/javascript">
  function displaySubTree(num, level, hide)
  {
    var el = document.all["subtree_" + num];
    var img = document.all["bullet_" + num];
    if (el.style.display == "none") el.style.display = "block"; else el.style.display = "none";
    img.src = "/img$Site:LangImagePrfix/admin/b_" + level + ((el.style.display == "none")?"_off":"_on") + hide + ".gif";
  }
</script>

$LevelNum(1)
$NodeNum(0)
^if($data.N){
	^shTreeLevelN[$id;^data.N.junction[]]
}{
	^shTreeLevel[$id;^data.$LevelNum.junction[]]
}


@shTreeLevel[id;leveldata]
^leveldata.menu{
#	^throw[a;=$leveldata=] 
	$title[^data.$LevelNum.show[$leveldata]]
	^NodeNum.inc[]
	^LevelNum.inc[]
и т.д.
т.е. data я получаю в shTree, а затем в shTreeLevel передаю тот же data, но лишь одно поле из него: junction.

если я вас правильно понял:
это: ^data.$LevelNum.show[$leveldata] все таки вызов метода. в поле хеша show кладется junction, т.е. указатель на код (в вашем случае не метод).
получается что то что написано тут (создание хеша и заполнение поля show):
^if(def $Types){
	^shTree[^if($IdPresent){$Id};
		$.1[
			$.junction[$getTypes]
			$.show[$shTypeItem]
		]
		$.2[
			$.junction[$getYears] ^rem{ функция получения данных для соответствующего уровня}
			$.args[id]						^rem{ параметры функции, описанной выше }
			$.show[$shYearItem]		^rem{ функция вывода текста элемента дерева }
			$.current[$.id[$CurVal.type]]		^rem{ значение аргументов для текущего (выделенного пользователем) узла }
		]
		$.3[
			$.junction[$getMonths]
			$.args[type,year]
			$.show[$shMonthItem]
  	  $.current[$.type[$CurVal.type] $.year[$CurVal.year]]
		]
		$.4[
			$.junction[$getNewsHeads] ^rem{ на последнем уровне у этой функции всегда должно быть в результате поле id }
			$.args[type,year,month]
			$.show[$shNewsItem]
	    $.current[$.type[$CurVal.type] $.year[$CurVal.year] $.month[$CurVal.month]]
		]
	]
}{
	^shTree[^if($IdPresent){$Id};
		$.1[
			$.junction[$getYears]
			$.show[$shYearItem]
		]
		$.2[
			$.junction[$getMonths]
			$.args[year]
			$.show[$shMonthItem]
  	  $.current[$.year[$CurVal.year]]
		]
		$.3[
			$.junction[$getNewsHeads] ^rem{ на последнем уровне у этой функции всегда должно быть в результате поле id }
			$.args[year,month]
			$.show[$shNewsItem]
	    $.current[$.year[$CurVal.year] $.month[$CurVal.month]]
		]
	]
}
ненужно?
или я непонимаю какой-то логики?

и вот что меня удивляет.
значит парсер когда вызывается shLeveTree проглатывает то что у него есть в data.LevelNum.junction[], а когда нужно вызвать show - он ругается.
непойму :(