Commit 2af9191c

mo <mo.khan@gmail.com>
2017-09-09 03:08:26
install autoview on ajax load but skip elements that are already setup.
1 parent c4364a9
Changed files (2)
app
assets
javascripts
spec
javascripts
app/assets/javascripts/initializers/auto_view_setup.js.coffee
@@ -2,10 +2,12 @@
 
 class CakeSide.AutoViewSetup extends CakeSide.Behaviour
   @on "ready"
+  @on "ajaxComplete"
 
   execute: ->
     for element in $('[data-autoview]')
-      @install($(element))
+      $element = $(element)
+      @install($element) unless $element.data('autoview-setup-complete')
 
   install: (element) ->
     viewName = element.data('autoview')
@@ -14,3 +16,4 @@ class CakeSide.AutoViewSetup extends CakeSide.Behaviour
     else
       constructor = CakeSide.Proxy.create(CakeSide.Views, viewName)
       CakeSide.AutoView.create(viewName, element, constructor)
+    element.data('autoview-setup-complete', true)
spec/javascripts/initializers/auto_view_setup_spec.js.coffee
@@ -11,10 +11,11 @@ describe "CakeSide.AutoViewSetup", ->
       CakeSide.AutoView.views = {}
 
     it 'attaches the autoview to the DOM element', ->
-      fixture.set '<div data-autoview="My.ChangePassword"></div>'
+      fixture.set '<div id="item" data-autoview="My.ChangePassword"></div>'
       subject.execute()
       result = CakeSide.AutoView.views['My-ChangePassword'][0]
       expect(result instanceof CakeSide.Views.My.ChangePassword).toEqual(true)
+      expect($('#item').data('autoview-setup-complete')).toEqual(true)
 
     it "returns nil if the autoview cannot be discovered", ->
       fixture.set '<div data-autoview="Unknown"></div>'