Commit c81e4414

mo <mo.khan@gmail.com>
2017-09-09 18:26:07
connect models to views using automodel.
1 parent b7c1d10
Changed files (7)
app/assets/javascripts/views/passwords/reset_form.js.coffee
@@ -4,6 +4,3 @@ class csx.Views.PasswordResetForm extends csx.FormView
   events:
     'input #user_email': 'onInput'
     'submit form': 'onSubmit'
-
-  initialize: () ->
-    @model = new csx.Models.PasswordReset()
app/assets/javascripts/views/sessions/login_form.js.coffee
@@ -7,6 +7,3 @@ class csx.Views.LoginForm extends csx.FormView
     'input #session_email': 'onInput'
     'input #session_password': 'onInput'
     'submit form': 'onSubmit'
-
-  initialize: () ->
-    @model = new csx.Models.Session()
app/assets/javascripts/views/sessions/registration-form.js.coffee
@@ -9,6 +9,3 @@ class csx.Views.RegistrationForm extends csx.FormView
     'input #user_password': 'onInput'
     'change #user_accepted': 'onInput'
     'submit form': 'onSubmit'
-
-  initialize: () ->
-    @model = new csx.Models.Registration()
app/assets/javascripts/views/auto_view.js.coffee
@@ -19,9 +19,15 @@ class csx.AutoView extends Backbone.View
     view = new constructor
       el: element
       $el: $(element)
+      model: @discoverModel($(element))
     view.render()
     key = name.replace(".", '-')
     @views[key] ?= []
     @views[key].push(view)
 
+  @discoverModel: (element) ->
+    modelName = element.data('automodel')
+    return if _.isUndefined(modelName)
+    new csx.Models[modelName]()
+
   render: -> @
app/views/passwords/new.html.erb
@@ -1,5 +1,5 @@
 <div class="row">
-  <div class="col" data-autoview="password-reset-form">
+  <div class="col" data-autoview="password-reset-form" data-automodel="PasswordReset">
     <h1>Forgot your password?</h1>
     <%= form_for(@user, url: passwords_path, html: { class: "form-horizontal needs-validation", novalidate: :novalidate }) do |f| %>
       <div class="form-group">
app/views/sessions/new.html.erb
@@ -10,7 +10,7 @@
   </div>
 
   <div class="col">
-    <div data-autoview="login-form">
+    <div data-autoview="login-form" data-automodel="Session">
       <%= form_for(@session, url: sessions_path(@session), html: { class: "form-horizontal needs-validation", novalidate: :novalidate }) do |f| %>
         <legend>Got an account? Login!</legend>
         <div class="form-group">
@@ -26,7 +26,7 @@
       <% end %>
     </div>
 
-    <div data-autoview="registration-form">
+    <div data-autoview="registration-form" data-automodel="Registration">
       <%= form_for(User.new, as: :user, url: registration_path, html: { class: 'form-horizontal', novalidate: :novalidate }) do |f| %>
         <fieldset>
           <legend>New to CakeSide? Join Us!</legend>
spec/javascripts/initializers/auto_view_setup_spec.js.coffee
@@ -7,6 +7,7 @@ describe "csx.AutoViewSetup", ->
     subject = new csx.AutoViewSetup()
 
   describe "#execute", ->
+
     beforeEach ->
       csx.AutoView.views = {}
 
@@ -23,3 +24,17 @@ describe "csx.AutoViewSetup", ->
 
       expect(_.isEmpty(csx.AutoView.views)).toEqual(true)
       expect(console.error).toHaveBeenCalled()
+
+    it "attaches the auto model to the auto view", ->
+      class csx.TestView extends csx.AutoView
+        @viewName 'test-view'
+
+      class csx.Models.Test extends Backbone.Model
+        defaults:
+          test: null
+
+      fixture.set '<div id="item" data-autoview="test-view" data-automodel="Test"></div>'
+      subject.execute()
+      result = csx.AutoView.views['test-view'][0]
+      expect(result instanceof csx.TestView).toEqual(true)
+      expect(result.model instanceof csx.Models.Test).toEqual(true)