Sylvain Wallez schrieb:

Hello,

>> So i'm asking you: Is there a way to cancel a repeaters delete-row
>> action in case a certain condition is met?

> Hmm... the delete-row action accepts additional listeners, but those are
> not supposed to be able to cancel the action. The "Invalid return" error
> you get is because the on-action is a script snippet that has no return
> value.

Ok, thanks for making this point clear.

> To achieve what you want, you should use a plain action widget with an
> on-action that surrounds the row deletion with the filtering logic.

Yes, that was one solution we already came up with, but i thought there
would be a better way to do this stuff.

Just for the archives, here is my solution:
---snip---
    <fd:action id="myid" repeater="myrepeater" select="select">
      <fd:label>Remove selected</fd:label>
      <fd:on-action>
        <fd:javascript>
                var form = event.source.form;
                var repeater = form.lookupWidget("myrepeater");
                var row;
                var message;
                for (var i=repeater.size-1; i &gt;= 0; i--) {
                        row = repeater.getRow(i);
                        if (row.lookupWidget("select").getValue().equals(true)) 
{
                                if (CERTAIN_CONDITION) {
                                        // print ("Not deleting!");
                                        message = i18n("MyCatalogue","You 
cannot delete sth that is still
referenced.");
                        form.lookupWidget("message").setValue(message);
                                } else {
                                        // print ("Deleting!");
                                        repeater.removeRow(i);
                                }
                        }
                }
        </fd:javascript>
      </fd:on-action>
    </fd:action>
---snap---

Thanks for your help!
Christoph

Reply via email to