OSDN Git Service

fix:retrive
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / cache.js.coffee
index 820b19f..7dd14af 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
@@ -30,40 +32,29 @@ 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
+  hold: (item) ->\r
+    return @holds[item.cache_key()] if @holds[item.cache_key()]\r
+    @holds[item.cache_key()] = item.clone()\r
   \r
-  edit: (model, id) ->\r
-    @listenTo(this, 'retrieve', @edit_retrieve)\r
-    @retrieve(model, id)\r
+  fix: (item) ->\r
+    delete @holds[item.cache_key()]\r
+    @restore(item).fetch()\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
+  release: (item) ->\r
+    delete @holds[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
@@ -77,9 +68,8 @@ 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
@@ -93,3 +83,17 @@ class Pettanr.Cache.Retriever
       # new item\r
       @trigger('retrieve', empty_item)\r
   \r
+  retrieve_force: (item) ->\r
+    item.fetch().done =>\r
+      @trigger('retrieve', item)\r
+  \r
+  edit: (options = {}) ->\r
+    empty_item = new @model({id: @id})\r
+    item = empty_item.hold()\r
+    if options.with_elements\r
+      item = item.with_elements()\r
+    item.fetch().done =>\r
+      if options.with_elements\r
+        item.attributes = item.replaced_attributes({hold: true})\r
+      @trigger('retrieve', item)\r
+  \r