lessc style.less > style.css
برای کامپایل با جاوا اسکریپت :
<link rel="stylesheet/less" type="text/css" href="content/style.less" /> <script src="Script/less.min.js"></script>
در خط اول مقدار خاصیت href برابر آدرس فایل less و src خط دوم شامل آدرس فایل کامپایلر جاوا اسکریپت بهینه شده است .
لینک دانلود کامپایلر جاوا اسکریپت: less.min.js
متدی برای بررسی صحت کد ملی وارد شده
Test Driven Development #3
من برای نصب نگارشهای مختلف VS.NET از VMWare استفاده میکنم. به این صورت تهیه بک آپ از یک یا چند فایل نهایی آن بسیار ساده خواهد بود و همچنین کل مجموعه قابل حمل میشود و به علاوه تداخل نگارشهای مختلف ویژوال استودیو را هم نخواهم داشت؛ اما ...
اگر از VMWare 7 استفاده میکنید و اجرای اولیه آن کمی طول میکشد یا هر از 10 تا 15 دقیقه یکبار این برنامه در حالت کما فرو میرود، مشکل از روشن بودن بررسی به روز رسانیهای آن از اینترنت است که در لاگ فایل آن هم قابل مشاهده میباشد:
CDS error: Failed to finish active transfer for https://softwareupdate.vmware.com/cds/index.xml: CDS_HTTP_HOST_RESOLVE_ERROR
روش دیگر انجام اینکار ویرایش فایل config.ini آن میباشد: (و بهتر است ویرایش گردد)
installerDefaults.autoSoftwareUpdateEnabled = "no"
installerDefaults.componentDownloadEnabled = "no"
installerDefaults.dataCollectionEnabled = "no"
C:\Documents and Settings\All Users\Application Data\VMware\VMware Workstation\config.ini
البته از شرکت VMWare انتظار بیشتری از این میرفت ولی خوب ... این فقط یک ضعف شدید برنامه نویسی است. بررسی synchronous بجای asynchronous به روز رسانیها، طوری که هر 10 تا 15 دقیقه یکبار عملا کل برنامه به خاطر این موضوع از کار میایستد.
ASP.NET MVC #6
- برای طراحی CSS بین برنامه نویسهای دات نت، فریم ورکی به نام LESS خیلی محبوبیت دارد (^).
- کتابخانههای جاوا اسکریپتی سمت کلاینت معنا پیدا میکنند. بنابراین آنچنان وارد بحث ASP.NET که سمت سرور است نمیشوند مگر اینکه کمک حالی در این رابطه باشند مانند jQuery. یا البته جاوا اسکریپت سمت سرور هم به نام نودجیاس وجود دارد که بحث دیگری است. در کل حین کار با جاوا اسکریپت دست بازتر است چون داخل مرورگر کاربر اجرا میشود که stateful است (مثل برنامههای سیلورلایت). به همین جهت کتابخانه MVVM هم برای جاوا اسکریپت وجود دارد (^). جالب اینجا است که این کتابخانه MVVM توسط یکی از اعضای تیم ASP.NET MVC طراحی شده.
انگیزه اصلی این نوشته شروع کار با AngularJs و استفاده از scope در این کتابخانه است. بیشتر دوستانی که کار با این کتابخانه را شروع میکنند و تجربه زیادی با جاوا اسکریپت ندارند، با مفهوم ارث بری scope مشکل پیدا میکنند.
ارث بری در scope های AngularJs موضوع پیچیده و عجیب و غریبی نیست. در واقع همان ارث بری prototype ای است که جاوا اسکریپت پشتیبانی میکند.
این روش توضیح خیلی ساده ای دارد.
در هنگام دسترسی به مقدار یک خصوصیت روی یک شی اگر آن خصوصیت در شی مورد نظر وجود نداشته باشد جاوا اسکریپت یک سطح در زنجیرهی prototype ها بالا رفته و به شی پدر دسترسی پیدا کرده و در آن به دنبال مقدار خصوصیت میگردد. این کار را آن قدر ادامه میدهد تا به بالاترین سطح برسد و دیگر چیزی پیدا نکند.
این بالا رفتن در زنجیرهی prototype ها عملا با دسترسی به خصوصیت prototype انجام میشود.
فرض کنید دو شی (دقت کنید که میگویم شی) به نامهای employee و person داریم. این دو شی را به صورت زیر تعریف میکنیم.
var person = { type: '', name:'No Name' }; var employee = { };
شی employee الان هیچ خصوصیت ای ندارد. و دسترسی به هر خصوصیت ای از آن هیچ نتیجهای در بر نخواهد داشت.
console.log('Before Inheritance -> employee.name = ' + employee.name);
با مقدار دهی کردن خصوصیت prototype مربوط به employee به person این شی را از person ارث بری میکنیم.
employee.__proto__ = person;
بعد از اجرا شدن این خط از برنامه هنگام دسترسی پیدا کردن به مقدار name، مقدار اصلی آن که در شی person وارد شده بود را خواهیم دید.
ملاحظه کردید که وقتی خصوصیت name در شی مورد نظر وجود نداشت به شی پدر رجوع شد و مقدار خصوصیت مربوطه از آن بدست آمد.
الان فرض کنید که در قسمتی از برنامه خواستیم مقدار name در شی employee را به مقدار مشخصی تغییر دهیم. به طور مثال:
employee.name = 'farid'; console.log('After Assiginig -> employee.name = ' + employee.name); console.log('After Assiginig -> person.name = ' + person.name);
با چاپ کردن مقادیر person.name و employee.name انتظار دارید چه نتیجه ای ببینید؟
اگر از زبانهای شی گرایی مانند #C آمده باشید احتمالا خواهید گفت مقادیر یکسان خواهند بود. ولی در واقع این گونه نیست. مقدار person.name همان مقدار اولیه ما خواهد بود و مقدار employee.name نیز ‘farid’.
دلیل این رفتار یک نکته ساده و اساسی است.
جاوا اسکریپت فقط در زمان دسترسی به یک خصوصیت در صورت پیدا نکردن آن در شی مورد نظر ما به سطوح بالاتر prototype ای رفته و دنبال آن خصوصیت میگردد.
اگر ما قصد مقدار دهی به یک خصوصیت را داشته باشیم و خصوصیت مورد نظر ما در شی وجود نداشته باشد جاوا اسکریپت یک نسخه محلی از خصوصیت برای آن شی میسازد و مقدار ما را به آن میدهد.
در واقع در مثال ما هنگام مقدار دهی به employee.name آن خصوصیت در شی موجود نبود و یک نسخه محلی به نام name در شی ایجاد شد و دفعه بعدی که دسترسی به مقدار این خصوصیت اتفاق افتد این خصوصیت به صورت محلی وجود خواهد داشت و جاوا اسکریپت به سطوح بالاتر نخواهد رفت.
تمام کدهای بالا در bin زیر موجود هستند.
var person = { info : { name: 'No Name', type: '' } }; var employee = {};
employee.__proto__ = person;
employee.info.name = 'farid';
console.log('After Assiginig -> employee.name = ' + employee.info.name); console.log('After Assiginig -> person.name = ' + person.info.name);
در مورد کار با jQuery Ajax و نحوه فراخوانی یک متد وب سرویس توسط آن، چند مطلب پیشتر ارائه شدند:
بررسی وجود نام کاربر با استفاده از jQuery Ajax در ASP.Net
و ...
تمام این مقالات یک ایراد مهم دارند که امروز با آن مواجه شدم و خلاصه آن به شرح زیر است:
پارامتر data متد Ajax جیکوئری را به صورت زیر در نظر بگیرید:
data: "{'username': '" + $('#<%= TextBox1.ClientID %>').val() + "'}",
\b Backspace (ascii code 08)
\f Form feed (ascii code 0C)
\n New line
\r Carriage return
\t Tab
\v Vertical tab
' Apostrophe or single quote
" Double quote
\ Backslash caracter
ابتدا ارجاعی از این اسکریپت باید به صفحه اضافه شود:
<script src="js/json2.js" type="text/javascript"></script>
var jsonText = JSON.stringify({ username: $('#<%= TextBox1.ClientID %>').val() });
...
data: jsonText,
به عنوان مثالی دیگر، اگر متد وب سرویس ما دو پارامتر داشت، jsonText به شکل زیر در خواهد آمد:
var jsonText = JSON.stringify({ param1: val1, param2: val2 });
به نظر من jQuery به چندین دلیل از کتابخانه MS Ajax و ملحقات آن مهمتر است و باید به آن پرداخته شود:
1- دانش شما قابل انتقال است. اگر روزی به PHP یا JSP یا موارد مشابه دیگری مهاجرت کردید، دانش jQuery شما باز هم قابل استفاده خواهد بود.
2- این کتابخانه بسیار سبکتر و کم حجم تر از MS Ajax است. (حجم آن کمتر از نصف است(+))
3- تقریبا از اکثر فریم ورکهای جاوا اسکریپتی موجود سریعتر است. (+)
4- پشتیبانی آن از مرورگرهای مختلف بینظیر است. لازم نیست عمر گرانمایه را صرف این کنید که چرا این اسکریپت در فایرفاکس کار میکنه اما در IE خیر.
5- کوهی از افزونههای مختلف برای آن موجود است. (jQuery plugin را در گوگل جستجو کنید)
6- استفاده از آن، میزان کد جاوا اسکریپتی را که باید نوشت تا حد بسیار قابل ملاحظهای کاهش میدهد، که در نهایت سبب ایجاد کدی خواناتر در مدت زمانی کمتر میگردد.
7- کدنویسی با jQuery از کد نویسی JavaScript ایی خالص بسیار سادهتر است. افرادی که تا دیروز حتی طرف جاوا اسکریپت هم نمیرفتند، امروزه پلاگینهای jQuery مینویسند.
8- مستندات کاملی داشته به همراه مثالهایی بسیار کاربردی.
9- به دلیل استفاده شدن از آن در پلتفرمهای مختلف، مثالهای کاربردی بیشتری داشته، همچنین منابع آموزشی پر محتواتری را نیز میتوان در این رابطه یافت. (میتوان tutorial های مربوط به php را مشاهده و آنها را به ASP.Net تبدیل کرد و صرفا منحصر به یک عده و یک پلتفرم نیست)
10- خلاقیت شما را نکشته و از شما فردی که هیچگونه درکی نسبت به عملیات اجکسی رخ داده ندارد، نخواهد ساخت. (MS Ajax برای ASP.Net یک شاهکار است. چند عدد محصور کننده را استفاده کنید، برنامه نویسی شما با روش سابق "هیچ" تفاوتی نخواهد داشت. مسلما این توانمندی تیم مایکروسافت را نمایش میدهد، نه توانمندی من و شما را! اما اگر نیاز به کمی ابتکار وجود داشت اینجا است که گیر خواهید افتاد و موارد 6 و 7 و 9 ذکر شده، jQuery را بر این کتابخانه مقدم خواهد ساخت)
11- با آمدن ASP.Net MVC تمایل به استفاده از jQuery به شدت افزایش یافته که نمود آنرا در وبلاگهای مطرح در این زمینه میتوان مشاهده کرد (اکثر مطالب ارسالی این روزهای بلاگهای ASP.Net حول و حوش ASP.Net MVC و jQuery است).