Model و Data در Javascript
هنگامی که شما یک اطلاعات را از سرور دریافت میکنید آیا بهتر نیست اطلاعات را نگه دارید تا در درخواست مجدد همین اطلاعات از آنها استفاده کنید؟
کلاً لایه model از سمت view میتواند دیده شود و همه نیاز های sync از طریق خود model حل شود. (دقت کنید که این موارد پیشنهادیست و به نسبت نرمافزار شما باید حل شود. ممکن از عمل sync جزیی از لایه controller شما باشد یا …)
مهمترین سؤال این مسأله این است دیتای مورد نظر کجا ذخیره شود؟
یکی از راحت ترین قسمتها خود object مربوط به model است
var User = { records: [], fetchRemote: function(){ /* ... */ } };
شما میتوانید یک کلاسModel درست کنید که tabel هایتان از آن مشتق شود و از طرفی خودش کار دریافت اطلاعات و … را انجام دهد.
از طرفی میتوانید از شبه ORM های موجود استفاده کنید. به طور مثال موارد زیر وجود دارند
- TaffyDB - The JavaScript Database -> http://www.taffydb.com/
- Supplement.js - JavaScript Extras -> http://supplementjs.com/
- Poincare/ShinyCar -> https://github.com/Poincare/ShinyCar
- Jaylist -> http://benbscholz.github.com/jaylist/
- marcuswestin/store.js -> https://github.com/marcuswestin/store.js
این کتابخانهها به طور کلیdata دریافت شده را با یک سری wrapper نگهداری میکنند و امکان جستجو و استفاده بهتر را در اختیار برنامه نویس می گذارند.
به طور مثال قسمتی از taffyDB رو ببینیم
// Create DB and fill it with records var friends = TAFFY([ {"id":1,"gender":"M","first":"John","last":"Smith","city":"Seattle, WA","status":"Active"}, {"id":2,"gender":"F","first":"Kelly","last":"Ruth","city":"Dallas, TX","status":"Active"}, {"id":3,"gender":"M","first":"Jeff","last":"Stevenson","city":"Washington, D.C.","status":"Active"}, {"id":4,"gender":"F","first":"Jennifer","last":"Gill","city":"Seattle, WA","status":"Active"} ]); // Find all the friends in Seattle friends({city:"Seattle, WA"}); // Find John Smith, by ID friends({id:1}); // Find John Smith, by Name friends({first:"John",last:"Smith"}); // Kelly's record var kelly = friends({id:2}).first(); // Kelly's last name var kellyslastname = kelly.last;
همچنین به جای خود object از localStorage خود html5 هم می تونید استفاده کنید.
Backbone js Model
ساختار model در backbone به این صورت است که فیلد های مورد نظر تک تک در object مشتق شده از model تعریف میشود و هر کدام از متدها با دسترسی ای که به فیلد ها دارند عملگری را انجام می دهند. به طور مثال:
var Game = Backbone.Model.extend({ initialize: function(){ alert("Oh hey! "); }, defaults: { name: 'Default title', releaseDate: 2011, } });
در حقیقت هر Row یک model میباشد و از طرفی مجموعهای اینها یک collection را ایجاد می کند.
var GamesCollection = Backbone.Collection.extend({ model : Game, old : function() { return this.filter(function(game) { return game.get('releaseDate') < 2009; }); } });
در این روش هر خصیصه که برای هر ردیف باشد در model اضافه میشود و هر چیزی که مربوط به کل collection باشد در collection تعریف می شود.
یکی از خاصیتهای جالب ذخیره دیتا در localstorge است
window.SomeCollection = Backbone.Collection.extend({ localStorage: new Backbone.LocalStorage("SomeCollection"), // Unique name within your app. // ... everything else is normal. });