چند روز پیش همکاران عزیز تو شرکت جادوی فکر ازم خواستن چند جلسه آموزش جاوا اسکریپت براشون برگزار کنم. اولین جلسه رو همون روز برگزار کردیم و طبق درخواست بچه ها قرار شد یک سری اطلاعات رو با استفاده از Ajax از سرور بخونیم و در یک پنجره مدال بوت استرپ نشون بدیم.
برای فرمت بندی اطلاعات در پنجره از قالب های کندو (Kendo UI Template) استفاده کردم. من عاشق ابزارهای Kendo هستم و تو همه پروژه هام ازشون استفاده می کنم.
خوب. کدهای زیاد پیچیده ای اینجا وجود نداره. ساختار پروژه به این شکله:
قالب پیش فرض پروژه وب در ویژوال استودیو 2013، شامل فایل های jQuery و Bootstrap هست و نیازی نیست که اونا رو اضافه کنم.
یک پوشه به اسم jslib درست کردم و کامپوننتهای جاوااسکریپت رو توش گذاشتم. و یک پوشه به اسم app که اسکریپتهای مربوط به صفحات رو توش میذارم. بعد از مدتها کار کردن و چیدن ساختار پروژه هام به شکلهای مختلف، به این نتیجه رسیدم که این شکل چیدن اسکریپت ها بهتره و نیازی نیست که حتما فایلهای جاوااسکریپت رو در پوشه Scripts و فایل های css رو در پوشه Content قرار بدیم.
این کد اولیه مربوط به صفحه Index.cshtml هست:
<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg showDataBtn" id="showData" data-toggle="modal" data-target="#myModal" data-id="1">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
<button class="btn btn-primary btn-lg" id="showData" data-toggle="modal" data-target="#myModal" data-id="1">
Launch demo modal
</button>
data-toggle="modal"
data-target="#myModal"
public class Person
{
public int Id { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public int Random { get; set; }
}
public class DataController : Controller
{
public ActionResult GetData(int id) { var person = GetSampleData().Single(p => p.Id == id); return Json(person, JsonRequestBehavior.AllowGet); } [NonAction] public Person[] GetSampleData() {
return new Person[]{
new Person(){
Id=1,
FName="Mahmood",
LName = "Dehghan",
Random = new Random().Next()
},
new Person(){
Id=2,
FName="Mehdi",
LName = "Miri",
Random = new Random().Next()
}
};
}
}
<script id="mdoelDataTemplate" type="text/x-kendo-template">
<div class="panel panel-warning">
<div class="panel-heading">
My template
</div>
<div class="panel-body">
<b>Id:</b> #=Id#<br />
<b>FName:</b> #=FName#<br />
<b>LName:</b> #=LName#<br />
<p>Random number from server: #=Random#</p>
</div>
</div>
</script>
$(function () {
var dataTemplate = kendo.template($("#mdoelDataTemplate").html());
$("#showData").click(function () {
$.getJSON(getUrl("Data/GetData") + "?id=" + $(this).data("id"), function (res) {
$("#myModal .modal-body").html(dataTemplate(res));
});
});
});
<script>
var baseUrl = "@Url.Content("~")";
function getUrl(url) {
return baseUrl + url;
}
</script>
public ActionResult GetData(int id)
{
var person = GetSampleData().Single(p => p.Id == id);
return Json(person, JsonRequestBehavior.AllowGet);
}
$.getJSON(getUrl("Data/GetData") + "?id=" + $(this).data("id"), function (res) {
<button class="btn btn-primary btn-lg showDataBtn" data-toggle="modal" data-target="#myModal" data-id="2">
Show me the second row
</button>
$(".showDataBtn").click(function () {
مطلب بسیار مفیدی بود. در باب نوشتن مطالب برای وبلاگ ، حق با شماست و وقت گیر بودن اون برای همه یک مسئله ی بزرگه ولی اگر علاقه به وبلاگ نویسی و نشر چنین مطالب مفیدی رو دارید باید جور هندوستان بکشید. اما اگر این مسئله خیلی برای شما اذیت کننده هست میتونید در برخی مطالب که نیاز به نمایش تصاویر و کد نیست پادکست منتشر کنید
با سپاس فراوان
حسین اندرخورا