You are welcome Marcel, I'm glad you solved it.

El 02/08/13 09:34, Marcel Waldvogel escribió:
> Ignacio,
> 
> thank you very much; that does indeed work. BTW, it also got me to get
> more accommodated to to using replacements, and with some tweaking, I
> got a successful table-plus, even with sorting on the virtual fields.
> 
> However, also in your example, the inputs are all in a single table cell.
> 
> I did manage to create a tabular layout with the input fields dispersed
> over several cells, but this uses <div>s and <span>s with "display:
> table-cell" etc. It seems that browsers do not like mixing <tr>/<td> and
> "display: table-row"/"display: table-cell", neither in a <table> nor
> "display: table". Neither do they like <form>s spanning outside the <tr>
> nor covering any number of <td>s (in Firefox, this results in the
> </form> being contracted to right after the <form …>, causing the
> <input>s to be lost from the <from> context).

You are right, forms and tables are not good friends :). You could use
"colspan=3" or even taking the form outside the table. For these cases I
usually use a bootstrap modal, with just a small button inside the table.

Regards,
Ignacio

> 
> So, I'll probably end up making my own copies of Hobo's <table> and
> <table-plus> converted to the "display: …" forms…
> 
> -Marcel
> 
> Am Donnerstag, 1. August 2013 19:10:29 UTC+2 schrieb Ignacio Huerta:
> 
>     Hi Marcel,
> 
>     I think there is an easy way to do this by replacing the tr completely.
>     This way you can create a new "tr" with the correct part name:
> 
>     <index-page>
>       <collection: replace>
>         <data-table/>
>       </collection:>
>     </index-page>
> 
>     <def tag="data-table">
>       <table-plus without-page-nav without-header fields="this, sum_x,
>     sum_y, add_x, add_y, actions">
>         <tr: replace>
>           <tr part="row">
>             <td><a/></td>
>             <td><view:sum_x/></td>
>             <td><view:sum_y/></td>
>             <td>
>               <form:datapoints.new ajax refocus-form>
>                 <input:x/>
>                 <input:y/>
>                 <submit label="Add"/>
>               </form>
>             </td>
>           </tr>
>         </tr:>
>       </table-plus>
>     </def>
> 
> 
>     I tested this locally, so it should work ;)
> 
>     Regards,
>     Ignacio
> 
> 
> 
>     El 01/08/13 12:46, Marcel Waldvogel escribi�:
>     > Hi, I'm fighting with Ajax forms in a table.
>     >
>     > The goal of the application is to have multiple named sets of data
>     > points, one set per row, where new data points may be entered in the
>     > same row:
>     >
>     > Dataset name  | Sum X | Sum Y | Add X   | Add Y   |
>     > --------------+-------+-------+---------+---------+--------
>     > Measurement 1 | 100   | 200   | [Input] | [Input] | [Submit]
>     > Measurement 2 | 120   | 220   | [Input] | [Input] | [Submit]
>     >
>     > In the end, I would like to use a sortable table, but I'm starting
>     small.
>     >
>     > Datapoint has x and y fields (floats) and belongs_to :dataset.
>     > Dataset has a title field (string) and sum_x, sum_y methods, which
>     sum
>     > the datapoints (avoiding the nil pitfalls created by
>     > <form:datapoints.new> :-)).
>     >
>     > It works when I use the card format with minimal markup:
>     >
>     > <def tag="card" for="Dataset">
>     >   <card class="dataset" param="default" merge>
>     >     <header: param>
>     > <a><name/></a> | <do part="dataset"><view:sum_x/> | <view:sum_y/> |
>     >                <form:datapoints.new ajax
>     > refocus-form><input:x/><input:y/><submit label="Add"/></form></do>
>     >     </header:>
>     >     <body: param/>
>     >   </card>
>     > </def>
>     >
>     > However, I have been unable to put this in a table. The plan was
>     to have
>     > the <tr> as the part, wrapping a <form> which in turn wraps the <td>s
>     > with one <view> or <input> each. The problems are as follows:
>     >
>     >   * Setting a "part=" attribute on <tr> results in "undefined method
>     >     `all_parameters' for
>     #<#<Class:0x007fdf214ab958>:0x007fdf214b3888>"
>     >   * Wrapping the naked <tr> in <do part="foo"> has the same problem
>     >   * Having the form span the <td>s results in an OK-looking page, but
>     >     when submitting the Ajax form, it results in "Couldn't create the
>     >     Datapoint. X can't be blank, Y can't be blank"
>     >
>     > The closest thing to working is this (modelled after <table> tag):
>     >
>     >   * The entire <form> is in one <td>, defeating the <table> layout.
>     >   * The sums are not updated by Ajax, only by a manual refresh.
>     >   * Even when changing the sum_y view to <view part="sum-x"
>     >     id="sum-x-#{scope.dataset.typed_id}"/> and adding an explicit
>     >     'update="sum-x-#{scope.dataset.typed_id}"' or
>     'updates="#sum-x-�"'
>     >     to the <form>, no update happens.
>     >
>     > What am I doing wrong?
>     > -Marcel
>     >
>     > <datapoints-table with="&Datapoints.all">
>     > <title-view:><a with="&this_parent"><view:title/></a></title-view:>
>     > </datapoints-table>
>     >
>     > <def tag="datapoints-table">
>     > <unless test="&(this.nil? || this.empty?) && !empty">
>     >     <table class="datapoints-table">
>     > <thead>
>     > <tr><th>Dataset name</th><th>Sum X</th><th>Sum Y</th><th>Add
>     > X</th><th>Add Y</th></tr>
>     > </thead>
>     > <tbody>
>     > <tr repeat>
>     > <set-scoped dataset="&this">
>     > <do with="&scope.dataset">
>     > <with-fields fields="title, sum_x, sum_y">
>     >                <td param="#{scope.field_name.to_s.sub('?',
>     '').gsub('.',
>     > '-')}-view"><view/></td>
>     > </with-fields>
>     > </do>
>     > <td param="datapoint-input">
>     > <form:records.new ajax refocus-form>
>     > <input:x/>
>     > <input:y/>
>     > <submit label="Add"/>
>     > </form>
>     > </td>
>     > </set-scoped>
>     > </tr>
>     > </tbody>
>     > </table>
>     > </unless>
>     > </def>
>     >
>     > --
>     > You received this message because you are subscribed to the Google
>     > Groups "Hobo Users" group.
>     > To unsubscribe from this group and stop receiving emails from it,
>     send
>     > an email to [email protected] <javascript:>.
>     > To post to this group, send email to [email protected]
>     <javascript:>.
>     > Visit this group at http://groups.google.com/group/hobousers
>     <http://groups.google.com/group/hobousers>.
>     > For more options, visit https://groups.google.com/groups/opt_out
>     <https://groups.google.com/groups/opt_out>.
>     >  
>     >  
> 
>     -- 
>     Ignacio Huerta Arteche
>     http://www.ihuerta.net
>     Tel�fono: 0034 645 70 77 35
>     Email realizado con software libre
> 

-- 
Ignacio Huerta Arteche
http://www.ihuerta.net
Teléfono: 0034 645 70 77 35
Email realizado con software libre

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/hobousers.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to