- From: John Boyer <boyerj@ca.ibm.com>
- Date: Mon, 18 Sep 2006 11:09:00 -0700
- To: Sébastien CRAMATTE <contact@zeninteractif.com>
- Cc: Xforms W3C Mailing list <www-forms@w3.org>, www-forms-request@w3.org
- Message-ID: <OF35C675A0.32190415-ON882571ED.00626394-882571ED.0063B500@ca.ibm.com>
Hi Sebastien, There are basically two patterns you would use for a "delete button" (by which I mean a trigger with a delete action attached to the DOMActivate event). The first is to have the trigger inside the repeat and the other is to have it outside the repeat. When a deletion trigger appears outside of a repeat, the delete action typically has a nodeset attribute with the same nodeset expression as the repeat, and the at attribute uses the index() function to cause deletion of the node of data corresponding to the current row of the repeat. When a deletion trigger appears inside of a repeat, it is duplicated on every row of the repeat, so the deletion trigger and hence the delete action already have an in-scope evaluation context equal to the very node you would like to delete. So, instead of setting the nodeset attribute equal to the same thing as the repeat, you have to recognize that the repeat itself is already giving the correct context to the delete action. So, you only have to say <delete nodeset="." at="1"/> and you're done. I think the confusion you were having about the 'at' attribute is because you were trying to set up the deletion trigger as if it were not inside the repeat. It turns out that you can do this too. And, the whole delete action looks almost identical when it is inside versus when it is outside of the repeat. So, you should also be able to write your delete below as follows: <form:delete ev:event="DOMActivate" nodeset="../concentre:feature" at="index('repeat-features')" /> This version of the at attribute works because when the user activates the delete trigger, the very first thing an XForms implementation does is set the index of the repeat so that the row containing the input focus is regarded as the "current" row of the repeat. As you correctly deduced, the nodeset attribute required the leading ../ because the repeat sets the in-scope evaluation context to be a particular concentre:feature, which differs on each row, so you back up to the parent of the homogeneous collection of concentre:feature elements, then select them all. The 'at' attribute then chooses the one corresponding to the row containing the trigger you just activated. Best regards, John M. Boyer, Ph.D. Senior Product Architect/Research Scientist Co-Chair, W3C XForms Working Group Workplace, Portal and Collaboration Software IBM Victoria Software Lab E-Mail: boyerj@ca.ibm.com http://www.ibm.com/software/ Blog: http://www.ibm.com/developerworks/blogs/page/JohnBoyer Sébastien CRAMATTE <contact@zeninteractif.com> Sent by: www-forms-request@w3.org 09/18/2006 08:50 AM To Xforms W3C Mailing list <www-forms@w3.org> cc Subject Nested repeat and xf:delete question ... Hello list, I've made this forms. It use nested repeat and works quite well. My only problem is that I want to put delete trigger in nested-repeat to delete a specific line but I don't know which value I should put in @at attribute .... Look at button "Delete this feature" I hope that someone have got the answer or any tips Regards <form:repeat nodeset="concentre:release" id="repeat-release"> <form:group> <form:label>Release</form:label> <form:input ref="concentre:label" > <form:label>Label:</form:label> </form:input> <form:group ref="concentre:features" appearance="minimal"> <form:repeat nodeset="concentre:feature" id="repeat-features"> <form:group> <form:label>Feature</form:label> <form:input ref="concentre:label" > <form:label>Name:</form:label> </form:input> <form:select1 ref="concentre:status" appearance="minimal"> <form:label>Status:</form:label> <form:item><form:label>Todo</form:label> <form:value>todo</form:value> </form:item> <form:item><form:label>Done</form:label> <form:value>done</form:value> </form:item> <form:item><form:label>Working on</form:label> <form:value>workingon</form:value> </form:item> <form:item><form:label>Discarded</form:label> <form:value>discarded</form:value> </form:item> </form:select1> <form:trigger> <form:label>Delete this feature</form:label> <form:delete ev:event="DOMActivate" nodeset="../concentre:feature" at="1" /> </form:trigger> </form:group> </form:repeat> <form:trigger> <form:label>Add a feature</form:label> <form:insert ev:event="DOMActivate" nodeset="concentre:feature" at="last()" position="after"/> </form:trigger> </form:group> </form:group> </form:repeat> <form:trigger> <form:label>Add release</form:label> <form:insert ev:event="DOMActivate" nodeset="concentre:release" at="last()" position="after"/> </form:trigger>
Received on Monday, 18 September 2006 18:09:27 UTC