Finom
@Finom

Как получить индекс массива, обрабатываемого в jQuery.tmpl, и почему не получается извлечь свойство объекта?

Добрый деньчер.

Пытаюсь получить индекс в массиве, обрабатываемом темплейтом. Первым делом я пытался создать переменную перед темплейтом, реализуя метод index:

var i=1;<br>
$('#trackTmpl').tmpl(data, {<br>
	index: function() {<br>
		return i++;<br>
	}<br>
});<br>


Но каждая итерация шаблонизатора включает еще и три невидимых итерации (i инкрементируется четыре раза), получается:

5, 9, 13,…

Затем я попробовал извлечь key, который есть в классе шаблонизатора (по крайней мере выводится в консоль):

$('#trackTmpl').tmpl(data, {<br>
	index: function() {<br>
		console.log(this);<br>


m_20111202-pb2j-41kb.jpg



Но вот незадача:

console.log(this.key); //undefined<br>
		return this.key; //undefined<br>
	}<br>
});<br>




Здесь у человека та же проблема: stackoverflow.com/a/5158869/968167

Но я не могу понять причины, если в объекте есть нечто, то оно должно возвращаться.



Кроме этого, я пытался вызвать «key» в самом шаблоне:

${$item.key}

Что так же не принесло успеха, хотя

${console.log($item)}

Показывает такой же результат, как на скриншоте выше.



У меня два вопроса: как не черезжопно получить индекс (вопрос по jQ.tmpl) и почему this ведет себя таким странным образом (общий вопрос по JS)?
  • Вопрос задан
  • 3498 просмотров
Пригласить эксперта
Ответы на вопрос 3
taliban
@taliban
php программист
Хрома под ругой нет, но мне кажется принцип у них одинаковый с фф:

var obj = {}
console.log(obj)
obj.q = 2;
console.log(obj)

Выведет в консоле:
Object {}
Object { q=2}

Но если просмотреть свойства первого обьекта, там будет свойство q со значением 2 (хотя его и не видно). Потому как в консоль он выводит не дамп обьекта а ссылку на него, и все что добавляется позже в консоли тоже будет появляться, возможно по этому в консоле есть key а у вас в коде (еще) нет.
Ответ написан
sdevalex
@sdevalex
А чем родной синтаксис не угодил (в шаблон передавать массив)?
{{each(key, item) items}}{{/each}}
Ответ написан
Комментировать
@dmitryklerik
Очень похоже на проблему замыканий — javascript.ru/basic/closure
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
24 нояб. 2024, в 14:37
3000 руб./в час
24 нояб. 2024, в 13:04
500 руб./в час
24 нояб. 2024, в 12:29
3000 руб./за проект