2013-10-05 4 views
0

Я уверен, что есть простой ответ на этот вопрос, но я не нахожу это :)JQuery переменных внутри цикла RenderPartial

У меня есть страница, то есть цикл, в этом цикле он вызывает RenderPartial

foreach(var thing in Things) 
{ 
    Html.RenderPartial("Graph", thing) 
} 

В этом RenderPartial, я создаю граф

var myGraph = new Graph(various things here) 
myGraph.Draw(); 

проблема заключается в том, теперь страница, которую я назвал RenderPartial из имеет кучу объектов графа, все названные myGraph и я могу» t обратиться к любому из них cifically. Как я могу построить имя составной переменной, чтобы каждый граф имел другое имя? Для каждого вызова RenderPartial создается только один граф, поэтому массив не работает.

+0

Что такое «RenderPartial»? Что такое 'Html'? Что такое «график»? Какую библиотеку вы используете? – Brian

+0

@Brian - Я думаю, что «RenderPartial» - это код ASP на стороне сервера. – nnnnnn

ответ

0

"JQuery переменные"

Они не являются JQuery переменные, они JavaScript переменные. jQuery - это «просто» библиотека функций JavaScript, и код, который вы показали, не включает использование jQuery.

«теперь страница, которую я назвал RenderPartial из имеет кучу объектов графа, все названные myGraph и я не могу обратиться к любому из них конкретно.»

На самом деле он имеет только один myGraph переменные, который вы держите перезапись, так что вы можете только когда-либо обратиться к последнему. (А раньше Graph объекты будут сборщик мусора, потому что не было бы никаких ссылок на них.)

«Только один граф создаются для каждого вызова RenderPartial так массив не работает.»

Я не понимаю, почему вы думаете, что массив не будет работать. Объявить его перед вашей петлей:

var myGraphs = [], 
    currentGraph; 

..., а затем в RenderPartial внутри цикла добавить в массив:

myGraphs.push(currentGraph = new Graph(...)); 
currentGraph.Draw(); 
// do any other operations on currentGraph within the loop 

Или без использования currentGraph переменной вы можете сделать это:

myGraphs.push(new Graph(...)); 
myGraphs[myGraphs.length - 1].Draw(); 

В любом случае, в другом коде позже на вашей странице вы можете выполнять операции над любым или всеми объектами Graph, обращаясь к ним как к элементам массива. Например, чтобы перерисовать их все:

for (var i = 0; i < myGraphs.length; i++) 
    myGraphs[i].Draw(); 
+0

Спасибо, я не знал о синтаксисе push для создания динамического массива. Это хорошо решает проблему! – ItinerantEngineer

+0

Добро пожаловать. Конечно, вы можете сказать 'myGraphs [myGraphs.length] = new Graph();' добавить элемент в конец, но '.push()' лучше. – nnnnnn

Смежные вопросы