۸ سال و ۳ ماه قبل، پنجشنبه ۲۰ خرداد ۱۳۹۵، ساعت ۱۸:۰۵
۸ سال و ۴ ماه قبل، پنجشنبه ۱۳ خرداد ۱۳۹۵، ساعت ۰۵:۲۲
۸ سال و ۴ ماه قبل، دوشنبه ۱۰ خرداد ۱۳۹۵، ساعت ۰۲:۰۹
بله. پارامتر rowObject یک آرایه از مقادیر ستونهای ردیف جاری است. یک مثال: «فرمت کردن اطلاعات نمایش داده شده به کمک jqGrid در ASP.NET MVC»
۸ سال و ۴ ماه قبل، شنبه ۸ خرداد ۱۳۹۵، ساعت ۰۵:۵۳
- data binding یعنی دقیقا به روز شدن اطلاعات با تغییرات کاربر. اگر مدنظر شما نیست، به صورت دستی آنرا مدیریت کنید. ابتدا کار اتصال به رخداد blur را انجام دهید:
و بعد تعریف متد معادل آن در کلاس کامپوننت:
+ Observableها دارای متدی هستند به نام debounceTime که برای همین منظور طراحی شدهاست. یک مثال:
البته این مورد بر روی async validation تاثیری ندارد. برای رفع این مشکل میتوان از راه حلی مانند «Debouncing Angular 2 Input Component» و یا «How to add debounce time to an async validator in angular 2» استفاده کرد (فعلا؛ در زمان نگارش این مطلب).
<input type="text" [(ngModel)]="myModel" (blur)="onBlurMethod()">
export class AppComponent { myModel: any; constructor(){ this.myModel = '123'; } onBlurMethod(){ alert(this.myModel); } }
+ Observableها دارای متدی هستند به نام debounceTime که برای همین منظور طراحی شدهاست. یک مثال:
export class AppComponent { searchForm: ControlGroup; results: Observable<any[]>; constructor(private http: Http) { let searchField = new Control(); this.searchForm = new ControlGroup({searchField}); this.results = searchField.valueChanges .debounceTime(500) .switchMap((val:string) => { return this.search(val); }); }
۸ سال و ۴ ماه قبل، چهارشنبه ۵ خرداد ۱۳۹۵، ساعت ۲۰:۱۵
یک نکتهی تکمیلی
مزیت استفاده از روش webpack، امکان تعریف یک چنین آدرس دهیهایی است جهت یکی کردن فایلهای html با فایل bundle نهایی:
برای gulp هم افزونهای به نام «gulp-angular-embed-templates» وجود دارد که چنین کاری را انجام میدهد (بدون نیاز به استفاده از متد require به صورت فوق). برای فایلهای CSS هم از افزونهی «gulp-angular2-embed-sass » میتوان استفاده کرد.
در این حالت وظیفهی tsc به شکل زیر درخواهد آمد:
و دیگر نیازی به وظیفهی templates نیست.
مزیت استفاده از روش webpack، امکان تعریف یک چنین آدرس دهیهایی است جهت یکی کردن فایلهای html با فایل bundle نهایی:
template: require('./app.component.html'),
در این حالت وظیفهی tsc به شکل زیر درخواهد آمد:
var embedTemplates = require('gulp-angular-embed-templates'); gulp.task("tsc", () => { var tsProject = tsc.createProject("./tsconfig.json"); var tsResult = gulp.src([appFolder + "/**/*.ts"]) .pipe(embedTemplates({ debug: true, basePath: "./", sourceType: "ts", minimize: { empty: true, spare: true, quotes: true, dom: { xmlMode: true, lowerCaseAttributeNames: false, lowerCaseTags: false } } })) // inline templates .pipe(tsc(tsProject), undefined, tsc.reporter.fullReporter()); return tsResult.js.pipe(gulp.dest(appFolder)); });
۸ سال و ۴ ماه قبل، چهارشنبه ۵ خرداد ۱۳۹۵، ساعت ۱۸:۲۱
به روز رسانی
در آخرین تغییرات وابستگیهای AngularJS 2.0 این موارد لحاظ شدهاند:
الف) در فایل package.json بجای es6-promise و es6-shim، فقط از core-js استفاده شدهاست:
ب) فایل typings.json واقع در ریشهی پروژه، جهت ذکر core-js به صورت زیر تغییر یافته است:
ج) اینبار ابتدای فایل main.ts به صورت زیر تغییر میکند:
د) به علاوه محتوای فایلهای systemjs.config.js و index.html نیز تغییر یافتهاند.
یک نکته: اگر در پوشهی typings قدیمی شما هنوز فایلهای es6-shim موجود هستند، باید آنها را حذف کنید. چون تعاریف آن، با تعاریف core-js جدید، تداخل میکنند و خطای «error TS2300: Duplicate identifier» را دریافت خواهید کرد.
پوشهی typings جدید را از اینجا دریافت کنید: typings.zip
در آخرین تغییرات وابستگیهای AngularJS 2.0 این موارد لحاظ شدهاند:
الف) در فایل package.json بجای es6-promise و es6-shim، فقط از core-js استفاده شدهاست:
"dependencies": { // ... "core-js": "^2.4.0", // ... },
{ "ambientDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160317120654", "jasmine": "registry:dt/jasmine#2.2.0+20160505161446", "node": "registry:dt/node#4.0.0+20160509154515" } }
/// <reference path="../typings/browser/ambient/core-js/index.d.ts" /> /// <reference path="../typings/browser/ambient/node/index.d.ts" />
یک نکته: اگر در پوشهی typings قدیمی شما هنوز فایلهای es6-shim موجود هستند، باید آنها را حذف کنید. چون تعاریف آن، با تعاریف core-js جدید، تداخل میکنند و خطای «error TS2300: Duplicate identifier» را دریافت خواهید کرد.
پوشهی typings جدید را از اینجا دریافت کنید: typings.zip
۸ سال و ۴ ماه قبل، سهشنبه ۴ خرداد ۱۳۹۵، ساعت ۲۳:۰۶
۸ سال و ۴ ماه قبل، سهشنبه ۴ خرداد ۱۳۹۵، ساعت ۱۴:۳۰
۸ سال و ۴ ماه قبل، چهارشنبه ۲۹ اردیبهشت ۱۳۹۵، ساعت ۱۸:۲۵
ممنوع کردن ورود session id در آدرس
سایتهای ASP.NET به یک چنین آدرسهایی پاسخ مثبت میدهند:
داخل پرانتز session id ذکر شدهاست و برای حالت cookie less است. حتی اگر استفادهی از کوکی را اجباری کرده باشید، باز هم میتوان آدرس فوق را درخواست داد و کار میکند (البته بدون تاثیر امنیتی است و پردازش نمیشود) ولی میتواند سبب بروز مشکل «وجود آدرسهایی با محتوای تکراری» در سایت شود.
برای ممنوع کردن یک چنین آدرسهایی میتوان تنظیم ذیل را اضافه کرد:
سایتهای ASP.NET به یک چنین آدرسهایی پاسخ مثبت میدهند:
http://yourserver/folder/(session ID here)/
برای ممنوع کردن یک چنین آدرسهایی میتوان تنظیم ذیل را اضافه کرد:
<rewrite> <rules> <rule name="Remove Session ID From URL" patternSyntax="ECMAScript" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{CACHE_URL}" pattern="^(.+):\/\/(.+)\/\((.*)\)\/(.+)" /> </conditions> <action type="Redirect" url="https://www.dntips.ir/" redirectType="Permanent" /> </rule> </rules> </rewrite>
۸ سال و ۴ ماه قبل، سهشنبه ۲۸ اردیبهشت ۱۳۹۵، ساعت ۱۹:۰۰
- در آیندهای نزدیک: «SQL Server on Linux»
- در هم اکنون: هاست سرور SQL در ویندوز و استفاده از آن در کلاینتهای لینوکسی با SQL Client
- و یا اگر از یک ORM استفاده میکنید (مانند EF یا NH)، چون در این حالت کدهای شما وابستگی به بانک اطلاعاتی مورد استفاده ندارند، سوئیچ کردن به بانکهای اطلاعاتی دیگر، ساده خواهد بود؛ مگر اینکه از قابلیتهای ORM استفاده نکرده باشید و مستقیما SQL نویسی ویژهی آن بانک اطلاعاتی خاص را انجام داده باشید. در غیر اینصورت (استفاده از ORM؛ بدون SQL نویسی مستقیم و ویژه)، حداکثر کاری که باید انجام دهید، تغییر پروایدرهای ابتدای برنامه است؛ بدون تغییری در کدهای اصلی برنامه
- در هم اکنون: هاست سرور SQL در ویندوز و استفاده از آن در کلاینتهای لینوکسی با SQL Client
- و یا اگر از یک ORM استفاده میکنید (مانند EF یا NH)، چون در این حالت کدهای شما وابستگی به بانک اطلاعاتی مورد استفاده ندارند، سوئیچ کردن به بانکهای اطلاعاتی دیگر، ساده خواهد بود؛ مگر اینکه از قابلیتهای ORM استفاده نکرده باشید و مستقیما SQL نویسی ویژهی آن بانک اطلاعاتی خاص را انجام داده باشید. در غیر اینصورت (استفاده از ORM؛ بدون SQL نویسی مستقیم و ویژه)، حداکثر کاری که باید انجام دهید، تغییر پروایدرهای ابتدای برنامه است؛ بدون تغییری در کدهای اصلی برنامه