فقط mvc هست که امکان استفاده از چند view engine را با هم دارد.
صفحهای که لینک دادید مربوط است به asp.net web pages و نه web forms. این web pages برای کار با webmatrix طراحی شده.
فقط mvc هست که امکان استفاده از چند view engine را با هم دارد.
صفحهای که لینک دادید مربوط است به asp.net web pages و نه web forms. این web pages برای کار با webmatrix طراحی شده.
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - My ASP.NET Application</title> <link href="~/node_modules/bootstrap/dist/css/bootstrap.css" rel="stylesheet" /> <link href="~/app/app.component.css" rel="stylesheet"/> <link href="~/Content/Site.css" rel="stylesheet" type="text/css" /> <!-- 1. Load libraries --> <!-- IE required polyfills, in this exact order --> <script src="~/node_modules/angular2/es6/dev/src/testing/shims_for_IE.js"></script> <script src="~/node_modules/es6-shim/es6-shim.min.js"></script> <script src="~/node_modules/systemjs/dist/system-polyfills.js"></script> <script src="~/node_modules/angular2/bundles/angular2-polyfills.js"></script> <script src="~/node_modules/systemjs/dist/system.src.js"></script> <script src="~/node_modules/rxjs/bundles/Rx.js"></script> <script src="~/node_modules/angular2/bundles/angular2.dev.js"></script> <!-- Required for http --> <script src="~/node_modules/angular2/bundles/http.dev.js"></script> <!-- Required for routing --> <script src="~/node_modules/angular2/bundles/router.dev.js"></script> <!-- 2. Configure SystemJS --> <script> System.config({ packages: { app: { format: 'register', defaultExtension: 'js' } } }); System.import('app/main') .then(null, console.error.bind(console)); </script> </head> <body> <div> @RenderBody() <pm-app>Loading App...</pm-app> </div> @RenderSection("Scripts", required: false) </body> </html>
import { Component } from 'angular2/core'; @Component({ selector: 'pm-app', template:` <div><h1>{{pageTitle}}</h1> <div>My First Component</div> </div> ` }) export class AppComponent { pageTitle: string = "DNT AngularJS 2.0 APP"; }
selector: 'pm-app',
<div> @RenderBody() <pm-app>Loading App...</pm-app> </div>
template:` <div><h1>{{pageTitle}}</h1> <div>My First Component</div> </div> `
import { Component } from 'angular2/core';
<div> @RenderBody() <pm-app>Loading App...</pm-app> </div>
System.import('app/main')
/// <reference path="../node_modules/angular2/typings/browser.d.ts" /> import { bootstrap } from "angular2/platform/browser"; // Our main component import { AppComponent } from "./app.component"; bootstrap(AppComponent);
node_modules\angular2\src\core\application_ref.d.ts(171,81): error TS2304: Build: Cannot find name 'Promise'. node_modules\angular2\src\core\change_detection\differs\default_keyvalue_differ.d.ts(23,15): error TS2304: Build: Cannot find name 'Map'.
با توجه به اینکه در حال کار با یک برنامهی جاوا اسکریپتی هستیم، باز نگه داشتن developer tools مرورگر، جهت مشاهدهی خطاهای احتمالی ضروری است.
در اینجا اگر خطایی وجود داشته باشد، یا اطلاعات اضافی مدنظر باشد، در console لاگ خواهند شد. برای مثال در اینجا عنوان شدهاست که برنامه در حالت توسعه در حال اجرا است. بهتر است برای ارائهی نهایی، متد enableProdMode را در فایل index.html فراخوانی کنید.
شاید شما هم مثل من فکر میکنید، به اندازهای که درحرفه یا زندگی شخصی خود زحمت میکشید، نتیجه نمیگیرید! چندی پیش کتابی خواندم از آقای J.D Meier (مهندس نرم افزار و مدیر پروژه در شرکت مایکروسافت) که نحوهی برنامه ریزی و زمان بندی من در کار و زندگی ام را به طور شگفت آوری متحول کرد. به همین دلیل به این فکر افتادم که در قالب چند مقاله به معرفی روش ایشان که یک روش بسیار آسان برای گرفتن نتایج بهتر و سریعتر در کار و زندگی است، بپردازم. امیدوارم همانطور که من این روش را مفید و کاربردی یافتم، برای خوانندگان این مقاله هم تأثیرگزار باشد.
این مدل که روش چابک ( Agile way ) نام دارد برپایه چهار اصل اساسی به نامهای قانون سه تایی، دیدگاه شنبه، خروجی روزانه و بازخورد پنجشنبه شکل گرفته است که درادامه به توضیح هریک از این اصول پرداخته شده است.
این قانون یک قانون ساده است و به شما کمک میکند تا در زمانی که خیلی پرمشغله هستید، با یک روش ساده بتوانید به کارهای خود سروسامان دهید و در زمان کوتاه به بهترین نتایج دلخواهتان دست یابید.
قانون سه تایی یعنی به صورت سه تایی فکر کردن. به این معنی که شما سه نتیجهای را که مایل هستید در انتهای یک روز، یک هفته یا یک ماه بدست آورید را مشخص میکنید. با این سیستم سه در سه (3 x 3) شما نقشه آنچه را که میخواهید به دست آورید، به صورت خیلی ساده و سریع در مجموعههای سه تایی طراحی میکنید که به راحتی قابل بخاطر سپردن و ویرایش سریع است.
داشتن یک برنامهی هفتگی، قلب مدل "روش چابک" است. الگوی برنامهی هفتگی در این روش براساس دیدگاه شنبه، خروجی روزانه، بازخورد پنجشنبه و با کمک قانون سه تایی بنا شده است. جدول زیر نحوه طراحی و برنامه ریزی در این روش را نشان میدهد.
در این مدل در روز شنبه (اولین روز هفته) سه نتیجهای را که مایل هستید در آخر هفته به دست بیاورید را مشخص میکنید. به طور مثال شما میخواهید طراحی اسلایدهای مربوط به جلسهی هفته آینده را تا آخر هفته جاری به اتمام برسانید و یا مایل هستید که پس از یک هفته تمرین، به راحتی بتوانید دو مایل را در روز بدوید.
در این مرحله، به صورت روزانه سه دستاوردی را که مایل هستید در انتهای یک روز داشته باشید را مشخص میکنید. به طورمثال در ارتباط با طراحی اسلایدهای جلسه آینده، شما میخواهید در پایان روز اسلایدهای مربوط به فاز اول پروژه را تکمیل کرده باشید و یا به طور مثال در ارتباط با رکورد دویدن، شما هدف هفتصد متر را برای خود در روز مشخص میکنید. به طور طبیعی خواهید دید که سه خروجی که برای هر روز خود در نظر میگیرید، باید در راستای سه دستاوردی باشند که برای هفتهی خود مشخص کردهاید.
در روز پنجشنبه شما این امکان را دارید که یک قدم به عقب برگردید و نگاهی به برنامه ریزی هفته و دستاوردهای حاصل از آن بیاندازید و ازخودتان بپرسید «کدام سه فعالیت هستتد که باید بیشتر بر روی آن کار کنم؟» و «کدام سه فعالیت هستند که به خوبی پیش رفته اند؟». با این روش شما یاد میگیرید ظرفیتهای خود را شناسایی کرده و به صورتی شفاف مشخص کنید کدام فعالیتها نیاز به تمرکز، وقت و انرژی بیشتری دارند.
نکته کلیدی: در روش چابک، نکتهی کلیدی این است که موفقیتهای خود را حتی اگر بسیار کوچک هم باشند، جشن بگیرید. به این دلیل که شما کار یا فعالیتی مشخص شده را خواه اینکه کوچک یا بزرگ باشد، به طور کامل انجام دادهاید. توجه کنید که این به نوع نگاه شما بستگی دارد که بتوانید سه نتیجهی مورد نظر خود در هفته و روز را بر اساس اولویتهای خود و به صورت درست انتخاب کنید. بازتاب پنجشنبه به شما این امکان را میدهد که اولویتهای خود را بازبینی و اصلاح کنید و از این بازخورد برای طراحی و برنامه ریزی هفته آینده و روزهای آتی استفاده کنید.
در جدول برنامه ریزی مدل چابک ستونی به نام نقاط جوش ( hot spots ) گنجانده شده است. اگر مسایل مهم زندگی خود را در نظر بگیرید، احتمالاً آنها جزء یکی از مسایل مربوط به تفکرات و یا جسم شما، مسایل احساسی ویا مالی، معاشرت با دیگران و تفریحات خواهند بود. نقاط جوش زندگی در حقیقت بخش هایی از زندگی شما هستند که شما بر روی آنها تمرکز بیشتری دارید و به طور ساده آنها میتوانند بیانگر درد و رنج فراوان، یا موفقیتها و موقعیتهای فراوان برای شما باشند. نکتهی مهم این است که این نقاط جوش هرچه باشند، بخشهای مهمی در زندگی شما، از نظر شما هستند.
سعی کنید یک لیست از نقاط جوش زندگی خود تهیه کنید. مثلا لذت بردن از زندگی، داشتن اندامی متناسب، به پایان رساندن یک مقطع تحصیلی، ارتقا یافتن در محل کار و یا داشتن یک رابطه خوب، میتواند مثالهایی از نقاط جوش زندگی باشند. مشخص کردن این نقاط جوش به شما کمک میکنند تا بتوانید بین کار، زندگی شخصی، مسایل مالی و سرگرمی، یک تعادل ایجاد کنید. به این معنی که به صورت متعادل و منصفانه، انرژی، زمان و تمرکز خود را صرف آنها کنید. به این نکته توجه کنید که وقتی به صورت متعادل بر روی هریک از نقاط جوش زندگی خود سرمایه گزاری میکنید، به طور ضمنی توانایی خود را برای رویارویی با اتفاقات جدید در تمام زمینههای یاد شده در بالا، افزایش میدهید. علاوه براین، اگر در یکی از زمینهها مثلا زندگی شخصی خود به اندازهی کافی سرمایه گزاری نکنید، تاثیرات منفی آن را در محیط کار و حرفهی خود مشاهده خواهید کرد.
1) قانون سه تایی به عنوان یک روش ساده برای جلوگیری از بی نظمی و هرج ومرج و به سرانجام رساندن کارهای موردنظر با کیفیت بالا در مدت زمان مناسب به کار میرود.
2) ابتدا سه نقطهی جوش را در زندگی خود انتخاب کنید. سه نتیجهی کلی و نهایی را برای هریک، براساس اولویتها و اهمیت آنها مشخص کنید. به طور مثال این سوال را از خود بپرسید که دوست دارید در سال آینده در هر یک از این بخشهای زندگی خود، چه دستاوردی را داشته باشید.
3) انتخاب سه دستاورد دلخواه را به صورت ماهیانه، هفتگی و روزانه تکرار کنید. توجه کنید که خروجی هر روز باید در راستای خروجی هفته و خروجی هر هفته در راستای خروجی هر ماه، باشد.
4) در پایان هر هفته کارهای انجام شده را با خروجی مورد انتظار مقایسه کنید. مشخص کنید که چه کارهایی خوب پیش رفته اند و چه کارهایی نیاز به وقت، تمرکز و یا زمان بیشتری نیاز دارند و از اطلاعات و بازخورد به دست آمده برای برنامه ریزی هفتهی آینده استفاده کنید.
در مقالات آینده درباره اینکه چطور به صورت بهینه و کارآمد دیدگاههای هفتگی و خروجیهای روزانه را مشخص و برنامه ریزی کنیم صحبت خواهیم کرد.یک سالی میشود که روی یک فریمورک رابط کاربری بصورت
متن باز به اسم HandyControl مشارکت دارم، این فریمورک در درجه اول مخصوص
برنامه نویسهای چین طراحی شده بود اما با بازخوردهایی که دریافت کرد،
جامعه انگلیسی زبان را هم پشتیبانی میکند. بدلیل اینکه هدف این فریمورک
ارائه کنترلهای ساده و بدور از پیچیدگی هست، Nabian با
اضافه کردن کنترلهای پیچیده مخالف هست. به همین دلیل تصمیم گرفتم تا شاخه
جدایی از این پروژه را ایجاد کنم و کنترلها و ویژگیهای مختلفی که سازگار
با برنامه نویسهای ایرانی باشد را اضافه کنم. درحال حاضر تقویم شمسی،
ساعت_تقویم شمسی، پشتیبانی از کد ملی، حروف فارسی در نوع ورودی TextBox
،استایلهای جدید بارگذاری، کنترل BusyIndicator، کنترل سرعت شمار
(SpeedoMeter) و چندین کلاس هلپر جهت کار با رجیستری، رمزنگاری و... را به
پروژه اضافه کردم.(لیست ویژگیهای اضافه شده را میتوانید از این قسمت مشاهده
کنید) (جهت مشاهده کنترلها و ویژگیهای اضافه شده در نسخه شخصی سازی شده
بعد از اجرای دمو از بخش Controls بخش PersianToolkit را انتخاب کنید)
صفحات پروژه اصلی===> سورس برنامه | صفحه ناگت | صفحه مارکت پلیس | مستندات چینی | مستندات انگلیسی | مستندات ویکی
using System.ComponentModel.DataAnnotations; namespace Core3xSharedResource.Models.Account { public class RegisterModel { [Required(ErrorMessage = "Please enter an email address")] // -->> from the shared resources [EmailAddress(ErrorMessage = "Please enter a valid email address")] // -->> from the shared resources public string Email { get; set; } [Required(ErrorMessage = "The {0} field is required")] [Display(Name = "User Name")] public string UserName { get; set; } } }
<?xml version="1.0" encoding="utf-8"?> <root> <data name="Please enter an email address" xml:space="preserve"> <value>لطفا ایمیلی را وارد کنید</value> </data> <data name="Please enter a valid email address" xml:space="preserve"> <value>لطفا ایمیل معتبری را وارد کنید</value> </data> <data name="The {0} field is required" xml:space="preserve"> <value>{0} را تکمیل کنید</value> </data> <data name="User Name" xml:space="preserve"> <value>نام کاربری</value> </data> </root>
ضمن اینکه اگر کسی بخواهد کار جدی اعتبارسنجی را در Web API انجام دهد بهتر است از Fluent Validation استفاده کند (که تبدیل به یک استاندارد برای آن شدهاست).
//app.component.js class AppComponent extends HTMLElement { static is = 'app-root' connectedCallback(){ this.innerHTML=`<h1>Hello World!</h1>` } } customElements.define(AppComponent.is, AppComponent)
//index.html <app-root></app-root>
//confirm-link.component.js class ConfirmLinkComponent extends HTMLAnchorElement { static is = "confim-link"; connectedCallback() { this.addEventListener("click", e => { if (!confirm("Are you sure?")) { e.preventDefault(); } }); } } customElements.define(ConfirmLinkComponent.is, ConfirmLinkComponent, { extends: "a" });
<a href="http://google.com" is='confirm-link'> google.com </a>
var div = document.createElement('div'); var shadowRoot = div.attachShadow({mode: 'open'}); //or mode: 'closed' shadowRoot.innerHTML = '<h1>Hello Shadow DOM</h1>';
مفهوم دیگری وجود دارد تحت عنوان Shadow Boundary که تعیین کنندهی مرز بین Light DOM و Shadow DOM و همان لایهی مهیا کنندهی کپسولهسازی Styling و Markup میباشد. در مطالب آتی خواهیم دید که به چه شکلی رخدادهای سفارشی ما قابلیت عبور از این لایه را خواهند داشت.
<div id="template" hidden> <img src="logo.png"> <div class="comment"></div> </div>
<script id="template" type="text/x-template"> <img src="logo.png"> <div class="comment"></div> </script> <script id="template" type="text/x-kendo-template"> <ul> # for (var i = 0; i < data.length; i++) { # <li>#= data[i] #</li> # } # </ul> </script>
<template id="template"> <img src="logo.png"> <div class="comment"></div> </template>
var template = document.querySelector("template"); var clonedNode = template.content.cloneNode(true); //deep:true document.body.appendChild(clonedNode);