استفاده از تمپلیت در جی کوئری

31. December 2011

jqeury templatesیکی از استفاده‌های بسیار پرکاربرد از jQuery، کار با دیتا و خوندن و نوشتن اون هست و معمولا این اطلاعات از درخواست‌های AJAX مانند به دست میاد. در مورد این که چجوری میشه اطلاعات رو از طریق AJAX و jQuery گرفت، راه های زیادی وجود داره که به چند نمونه قبلا اشاره شده است.

این بار میخواهیم در مورد اینکه این اطلاعات رو چگونه شکل بدیم و در صفحه وب نشون بدیم، یه روش خیلی خوب و کارآمد رو یاد بگیریم و اون چیزی نیست جز استفاده از Template در جی کوئری. یعنی به جای استفاده از حلقه های تو در تو، یک قالب کلی میسازیم و دیتا رو به اون قالب میریزیم و یک لیستی از اطلاعات مورد نظر رو در صفحه وب نشون میدیم.

پلاگینی با عنوان jQuery Template وجود داره که با کمک اون خیلی ساده میشه از قابلیت طراحی یک قالب برای نشون دادن دیتا از اون استفاده کرد. هر چند این پلاگین در حالت بتا قرار داره و اعلام شده که دیگه روش کار نمیشه و ممکن هست در آینده از طرف تیم jQuery یک پلاگین کامل‌تر و سریع‌تر معرفی بشه، اما به هر حال این پلاگین خیلی خوب کار میکنه و خیلی از کارها رو راه با سادگی راه میندازه. پس اگر در یک پروژه نسبتا بزرگ با مشکلاتی از این پلاگین مواجه شدید، یا باید برای ورژن جایگزین صبر کنید یا توی سورس این پلاگین دست ببرید و مشکلتون رو حل کنید.

شروع کار

برای شروع کار باید پلاگین Template رو دانلود کنید و یا میتونید مستقیم از CDN مایکروسافت استفاده کنید. برای دانلود روی لینک رایت کلیک کنید و  Save link as یا Save target as یا … بزنید.

برای استفاده در پروژه:
http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js

سورس:
http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.js

و البته خود کتابخونه jQuery هم که فراموش نمیشه.

 

خواندن دیتا:

فرض میکنیم اطلاعات مورد نظر را از یک منبعی خوانده‌ایم و در این مثال این اطلاعات رو به صورت static به یک متغیر پاس میدهیم.

 

استفاده از تمپلیت:

در این مثال به صورت خیلی ساده اطلاعات خوانده شده را با استفاده از تمپلیتی که ساخته‌ایم، نمایش میدهیم:

<html>

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>jQuery Template</title>
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="jquery.tmpl.min.js" ></script>

</head>

<body>
<input type="button" value="load" id="btn" />
<div id="result"></div>


<script id="template1" type="text/x-jquery-tmpl">
    <ul>
        <li><strong>${Name}</strong>
        <br/>
        ${Job}
        </li>
    </ul>
</script>


<script type="text/javascript">

    //در مثال واقعی، این مقدار توسط درخواست ای‌جکس برگردانده میشود
    var mydata = [
        { Name: "Farshad", Job: "Designer" },
        { Name: "Amir", Job: "Marketing" },
        { Name: "Ali", Job: "Developer" }
    ];
   
   
    $(function(){
   
        $("#btn").live("click",function() {
       
            $("#template1").tmpl(mydata).appendTo("#result");
               
        });
    })

</script>

</body>

</html>

با کلیک کردن بر روی دکمه، اطلاعات ما که 3 مقدار 2 تایی هست، توسط tmpl به داخل Template که در یک بلاگ <script> با ID مشخص نوشته شده است، ریخته میشود و توسط appendTo به بخشی از html که مورد دلخواه هست، اضافه میشود.

در داخل تمپلیت دقت کنید که دیتا به چه صورت صدا زده شده و باقی موارد هم که html میباشد. نتیجه کار به صورت زیر هست:

jquery templates

به همین سادگی میشه به اطلاعات خام، شکل و فرمت داد و کد تمیزتری رو هم داشت. به این ترتیب از توابعی مثل each هم نیازی نیست استفاده بشه.

 

چند نکته:

یک:
اگر اطلاعاتی که میخواهید نمایش داده شود، حاوی کدهای اچ تی ام ال بود، باید از {{html}} استفاده کنید تا اطلاعات به صورت encode نشده نمایش داده شود.

<script id="template1" type="text/x-jquery-tmpl">
    <ul>
        <li><strong>${Name}</strong>
        <br/>
       ${{html Description}}
        </li>
    </ul>
</script>


<script type="text/javascript">

    //در مثال واقعی، این مقدار توسط درخواست ای‌جکس برگردانده میشود
    var mydata = [
        { Name: "Farshad", Description: "<em>Designer</em><br />..." },
        { Name: "Amir", Description: "<img src='...' />" }
    ];

    // ادامه مثل قبل

 

دو:
اگر اطلاعات شما دارای چند مقدار برای یک گروه بود، باید از {{each}} استفاده کنید.

<script id="template1" type="text/x-jquery-tmpl">
<ul>
<li><strong>${Name}</strong>
<br/>

        {{each Job}}
                ${$value.Title} <br/>
        {{/each}}
       

</li>
</ul>
</script>


<script type="text/javascript">

var mydata = [
    { Name: "Farshad",
         Job: [{ Title: "Designer"},{ Title: "Graphist"}] 
    },
    { Name: "Amir", 
         Job: [{Title: "Marketing"},{Title: "Sales"}] 
    }
    ];

// ادامه مثل قبل

نتیجه:

jquery templates

 

سه:
شما میتوانید از عبارتهای شرطی و همچنین Template های تو در تو هم استفاده کنید.

 

پی نوشت:
این مطلب به پیشنهاد یکی از خوانندگان وبلاگ جعبه ابزار نوشته شد. شما هم اگر در مورد مطلب به خصوصی که کمتر به زبان فارسی به اون پرداخته شده، دوست دارید بیشتر بدونید، مطرح کنید. Smile

 

این مطلب به صورت اختصاصی برای وبلاگ جعبه ابزار نوشته شده است. استفاده از این مطلب به شرط ذکر منبع، آزاد می‌باشد.

دسته بندی موضوعی: jQuery
برچسب ها: - - - -

Comments

siavash
siavash
1/4/2012 1:44:53 AM #
سلام !
راستش اگه بخوام خیلی خلاصه بگم باید تو یه جمله ملیشه ای بگم :
--- آقا کارت خیلی درسته ! ---
من خودم طراح وبسایتم اما راستشو بخوای به هیچ عنوان نه درس برنامه نویسی رو خوندم و نه کلاسی براش رفتم - همش رو از تو اینترنت و مقالات یاد گرفتم و الحمدلله تا حالا نشده رو کدی گیر کنم !
واسه همین توی نت و وبسایتهایی که آموزش برنامه نویسی تحت نت باشن زیاد سر میزنم و میچرخم ! اما تو هیچ کدومشون پست یا کامنتی نمیذارم چون اگه بخوام اینکارو بکنم باید روزانه حداقل 1000 کامنت بذارم !
اما هر چی فکر کردم دیدم واسه این وبسایت نمیشه کامنتی نذاشت یا اینکه بخوام سر سری ازش رد شم !
تو 2 ساعتی که پای نت بودم به همه پست هات یه سری زدم و 90درصد شون رو خودنم !
واقعا عالی بود و اینکه ازت ممنونم که اینقدر تایم گذاشتی و مطالبت رو خیلی عامیانه و ساده عنوان کردی !
ازین به بعد این وبسایت رو هر روز چک میکنم به امید اینکه روزی ببینم توی تولبار آلکسا م عدد -1- ( یک ) کنار دامینت رقم خورده باشه Smile
بازم ازت ممنونم آقا محمد عزیز !
باعث افتخارمه که بتونم شما رو به عنوان دوست صدا بزنم ! Smile
با تشکر و احترام !
سیاوش Smile
me
1/4/2012 9:57:08 AM #
ممنون سیاوش جان، لطف داری شما Smile
امیدوارم مطالبی که در آینده نوشته میشه هم براتون مفید باشه.
siavash
siavash
1/5/2012 12:25:42 AM #
خواهش میکنم محمد جان !
بنده فقط چیزی رو که واقعیت داشت عنوان کردم !
راستش خیلی ممنون میشم که بیشتر به مبحث Jquery و php برامون توضیح بدی و اینکه برای استفاده از لینک ها در سایتی که به عنوان یه سایت تبلیغاتی و پر لینک استفاده میشه چطور باید از دستور link NOFOLLOW و DOFOLLOW استفاده کرد ! و اهمیت این مورد رو هم واسمون توضیح بدی ممنون میشم !
با تشکر ! Smile
amir hosein jelodari
amir hosein jelodari
1/6/2012 9:26:43 PM #
واقعا سایتتون عالیه ... من که از این مطلب کمال استفاده رو بردم!
me
1/7/2012 10:07:46 AM #
@سیاوش
توی برنامه کاری قرار میدم. اگر فرصتی دست داد در موردش مینویسم Smile
amir hosein jelodari
amir hosein jelodari
1/7/2012 11:42:38 AM #
پیشنهاد میکنم یه نگاهیم به KnockOut.Js  هم بزنین ... به نظر میرسه این فریمورک جایگزینی باشه واسه jquery templates ...
me
1/7/2012 11:49:20 AM #
ممنون از معرفی KnockOut.Js
در واقع این خودش یک کتابخونه کامل هست که بر مبنای الگوی برنامه نویسی MVVM پیاده سازی شده با جاوا اسکریپت و بسیار فرا تر از یک پلاگین ساده برای ساختن الگو و تمپلیت برای نشون دادن اطلاعات هست.
amir hosein jelodari
amir hosein jelodari
1/7/2012 12:43:06 PM #
یله ... ممنون از توضیحتون ...
بهترین منبع آموزشی KnockOut.Js :
http://learn.knockoutjs.com/

Add comment


(Will show your Gravatar icon)

biuquoteLTR
Loading



Clicky Web Analytics
Subscribe
Follow me