Helma Logo
main list history
previous version  overview  next version

Version 7 by maks on 25. January 2008, 05:49

While I prefer Helma over RubyOnRails, I have been influenced by reading about Rails and the convenience of their scaffolding system.
So I've created a basic work-alike system (but not a straight port!) using actions/skins for HopObject that depends on following some coding conventions.

The conventions are:
<strong>Ensure each Prototype defines a _children collection of its own type</strong>
eg.
Root/User/type.properties

  _children = collection(User)

<strong>Create mountpoints for each Prototype you want to access directly</strong>
eg.
Root/type.properties

  users = mountPoint(User)

<strong> Ensure there is a skin named itemList available for each prototype in order to render each HopObject item in the list skin. </strong>
eg.
User/listItem.skin

  <tr>
    <td>
        <% this.id %>           
    </td>
    <td>
        <% this.username %>
    </td>
    <% this.href name="editDelete" %>
  </tr>


and HopObject/skins/editDelete.skin has something like:
  <td>
    <a href="<% this.href %>edit" >EDIT</a>
  </td>
  <td>
    <a href="<% this.href %>delete" >DELETE</a>
  </td>

Then copy the provided hop action files (.hac file attachment attachments at the bottom of this page), actions actions, HopObject.js and skins into your apps HopObject prototype folder.
Copy the attached htmlpage.skin into your apps Global folder.

You can now use the default create, list, etc. actions with urls like:

http://localhost:8080/myapp/users/create 
http://localhost:8080/myapp/users/list
etc.

While I have generic create.skin, edit.skin, etc. in HopObject, if you put a more customised one in any of your prototypes it will "override" my generic ones in the HopObject prototype. Likewise you can create your own edit function that will be called instead of the generic one in HopObject.

Likewise the generic processForm() in HopObject that is called by create.hac and edit.hac can be over-ridden by a custom one if you need to do special processing on form data for any particular prototype and finally you can of course create custom create,edit,list, delete actions in each prototype to completely change this default processing.

Note: make sure you add the jala.ListRender.js as one of your applications repositories, eg:

  myapp.repository.2 = modules/jala/code/ListRenderer.js

<% this.attachments %>

     removed
     added