<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://devlicio.us/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Sara Chipps</title><subtitle type="html" /><id>http://devlicio.us/blogs/sara_chipps/atom.aspx</id><link rel="alternate" type="text/html" href="http://devlicio.us/blogs/sara_chipps/default.aspx" /><link rel="self" type="application/atom+xml" href="http://devlicio.us/blogs/sara_chipps/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2009-12-07T05:09:00Z</updated><entry><title>Easy HTML Templating with JQuery</title><link rel="alternate" type="text/html" href="/blogs/sara_chipps/archive/2009/12/07/easy-html-templating-with-jquery.aspx" /><id>/blogs/sara_chipps/archive/2009/12/07/easy-html-templating-with-jquery.aspx</id><published>2009-12-07T10:09:00Z</published><updated>2009-12-07T10:09:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;I have been wanting to write a blog about this for a while and my first post on Devlicious is the perfect place. Firstly I have to thank &lt;a href="http://jesschadwick.blogspot.com/" title="Jess Chadwick" target="_blank"&gt;Jess Chadwick&lt;/a&gt; for his help with this when I first started out with the &lt;a href="http://bundl.it" title="Bundl.it" target="_blank"&gt;Bundl.it&lt;/a&gt; project. Working with ASP.NET MVC has been wonderous, but when I was first starting out I was confused how I would replicate some of the behavior I was used to on my heavy server controls.
&lt;p class="MsoNormal"&gt;&lt;span&gt;I wanted my page to be quick, and to do this I wanted only the amount of HTML I needed to display to be on the page. When I was using webforms I would probably do this with a repeater, but using MVC I thought dynamically generating the HTML was the way to go.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Your first step is creating your template; your template is the HTML that gets added to the page on user action. You want it to be hidden; throwing it in a script tag is a good way to do this. You need to give it an ID that can be referenced in your code. You can create multiple templates as well. I am dynamically creating an unordered list.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;My template looks like this:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&amp;nbsp;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&amp;quot;ItemTemplate&amp;quot;&lt;/span&gt;&amp;nbsp;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&amp;quot;text/html&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;li class=&amp;quot;item&amp;quot; value=&amp;quot;|rowNumber|&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;input type=&amp;rdquo;text&amp;rdquo; name=&amp;rdquo;input|rowNumber|&amp;rdquo; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Now within my code I need to put a place holder where I want my HTML to go.&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;I have my unordered list called url_list.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&amp;quot;url_list&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Now, you see that most of my items look like this &amp;ldquo;|rowNumber|&amp;rdquo; I have a variable in my code called nextUniqueItemID (I believe in extremely descriptive variable names). Here is my &amp;ldquo;addItem&amp;rdquo; function. I am calling this on user button click, you can interpret it how you like.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&amp;nbsp;addItem() {&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&amp;nbsp;list = $(&lt;span&gt;&amp;#39;#url_list&amp;#39;&lt;/span&gt;),&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;items = list.find(&lt;span&gt;&amp;#39;li&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;list.append($(&lt;span&gt;&amp;#39;#ItemTemplate&amp;rsquo;&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;.html().replace(/\|rowNumber\|/gi, nextUniqueItemID++));&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;The first thing it does is find my unordered list using the ID selector. Then the append function locates my template using the same selector and adds it to the html inside the url_list. It also replaces the rowNumber with the nextUniqueItemID, that way when I can reference this particular input when submitting my form. That&amp;#39;s it! It&amp;#39;s that easy and it&amp;#39;s a great way to generate quick html on the fly.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=54338" width="1" height="1"&gt;</content><author><name>SaraC</name><uri>http://devlicio.us/members/SaraC/default.aspx</uri></author><category term="Dynamic HTML" scheme="http://devlicio.us/blogs/sara_chipps/archive/tags/Dynamic+HTML/default.aspx" /><category term="HTML Templating" scheme="http://devlicio.us/blogs/sara_chipps/archive/tags/HTML+Templating/default.aspx" /><category term="JQuery" scheme="http://devlicio.us/blogs/sara_chipps/archive/tags/JQuery/default.aspx" /></entry></feed>