OSDN Git Service

fix: fetch fail
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / cache.js.coffee
index 820b19f..7d93922 100644 (file)
@@ -1,7 +1,9 @@
 class Pettanr.Cache\r
   \r
   constructor: (options) ->\r
+    @operators = options.operators\r
     @data = {}\r
+    @holds = {}\r
     _.extend(this, Backbone.Events)\r
   \r
   # return cached items\r
@@ -18,7 +20,7 @@ class Pettanr.Cache
         cached_item  # merge?\r
       else\r
         @data[item.cache_key()] = item\r
-      @refresh(return_items)\r
+      @refresh(return_items)\r
     return_items\r
   \r
   restore: (key) ->\r
@@ -30,44 +32,40 @@ class Pettanr.Cache
     #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
+  is_hold: (item) ->\r
+    if @holds[item.cache_key()]\r
+      true\r
     else\r
-      # new item\r
-      @trigger('retrieve', empty_item)\r
+      false\r
   \r
-  edit: (model, id) ->\r
-    @listenTo(this, 'retrieve', @edit_retrieve)\r
-    @retrieve(model, id)\r
+  hold: (item) ->\r
+    return @holds[item.cache_key()] if @holds[item.cache_key()]\r
+    @holds[item.cache_key()] = item.clone()\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
+  fix: (item) ->\r
+    delete @holds[item.cache_key()]\r
+    @restore(item).fetch()\r
+  \r
+  release: (item) ->\r
+    delete @holds[item.cache_key()]\r
+  \r
+  free: (item) ->\r
+    delete @data[item.cache_key()]\r
   \r
   refresh: (item) ->\r
-    if item.expire_time\r
-      if Date.now() >= return_items.expire_time\r
-        @sync(item)\r
-    item\r
+    @restore(item.cache_key()).fetch()\r
+    #if item.expire_time\r
+    #  if Date.now() >= return_items.expire_time\r
+    #    @sync(item)\r
+    #item\r
   \r
   sync: (item) ->\r
-    item.fetch().done =>\r
-      item.expire_time.setTime(Date.now() + 10 * 60 * 1000)\r
+    item.fetch({\r
+      success: (model, response, opt) =>\r
+        item.expire_time.setTime(Date.now() + 10 * 60 * 1000)\r
+      error: (model, response, opt) =>\r
+        @trigger('fail', response, opt)\r
+    })\r
   \r
 class Pettanr.Cache.Retriever\r
   \r
@@ -77,19 +75,40 @@ class Pettanr.Cache.Retriever
   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
+      # query (ex: folders/3?watch)\r
+      @retrieve_force(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
+        empty_item.fetch({\r
+          success: (model, response, opt) =>\r
+            Pettanr.cache.store(empty_item)\r
+            @trigger('retrieve', empty_item)\r
+          error: (model, response, opt) =>\r
+            @trigger('fail', response, opt)\r
+        })\r
     else\r
       # new item\r
       @trigger('retrieve', empty_item)\r
   \r
+  retrieve_force: (item) ->\r
+    item.fetch({\r
+      success: (model, response, opt) =>\r
+        @trigger('retrieve', item)\r
+      error: (model, response, opt) =>\r
+        @trigger('fail', response, opt)\r
+    })\r
+  \r
+  edit: (options = {}) ->\r
+    empty_item = new @model({id: @id})\r
+    item = empty_item.hold()\r
+    item.fetch({\r
+      success: (model, response, opt) =>\r
+        @trigger('retrieve', item)\r
+      error: (model, response, opt) =>\r
+        @trigger('fail', response, opt)\r
+    })\r
+  \r