OSDN Git Service

change: cache system
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / cache.js.coffee
index 17675c7..820b19f 100644 (file)
@@ -27,8 +27,37 @@ class Pettanr.Cache
     else\r
       key.cache_key()\r
     item = @data[k]\r
-    if item\r
-      @refresh(item)\r
+    #if item\r
+    #  @refresh(item)\r
+  \r
+  retrieve: (model, id, force) ->\r
+    empty_item = new model({id: id})\r
+    if force\r
+      # query\r
+      empty_item.fetch().done =>\r
+        @trigger('retrieve', empty_item)\r
+    else if id\r
+      # existence item\r
+      item = @store(empty_item)\r
+      if item\r
+        @trigger('retrieve', item)\r
+      else\r
+        empty_item.fetch().done =>\r
+          @store(empty_item)\r
+          @trigger('retrieve', empty_item)\r
+    else\r
+      # new item\r
+      @trigger('retrieve', empty_item)\r
+  \r
+  edit: (model, id) ->\r
+    @listenTo(this, 'retrieve', @edit_retrieve)\r
+    @retrieve(model, id)\r
+  \r
+  edit_retrieve: (item) ->\r
+    editting_item = item.clone()\r
+    # get latest item\r
+    editting_item.fetch().done =>\r
+      @trigger('edit', editting_item)\r
   \r
   refresh: (item) ->\r
     if item.expire_time\r
@@ -40,3 +69,27 @@ class Pettanr.Cache
     item.fetch().done =>\r
       item.expire_time.setTime(Date.now() + 10 * 60 * 1000)\r
   \r
+class Pettanr.Cache.Retriever\r
+  \r
+  constructor: (@model, @id) ->\r
+    _.extend(this, Backbone.Events)\r
+  \r
+  retrieve: (force) ->\r
+    empty_item = new @model({id: @id})\r
+    if force\r
+      # query\r
+      empty_item.fetch().done =>\r
+        @trigger('retrieve', empty_item)\r
+    else if @id\r
+      # existence item\r
+      item = Pettanr.cache.restore(empty_item)\r
+      if item\r
+        @trigger('retrieve', item)\r
+      else\r
+        empty_item.fetch().done =>\r
+          Pettanr.cache.store(empty_item)\r
+          @trigger('retrieve', empty_item)\r
+    else\r
+      # new item\r
+      @trigger('retrieve', empty_item)\r
+  \r