This is slightly off-topic, but since I'm running into this problem while using Catalyst, I'm hoping that others on the list may have already solved it.
I was writing a simple template today, using TT + DBIC. I had an object and was exercising a has_many relationship. I simply wanted to see if any rows had been returned. It seemed simple enough: [% SET children = parent.children %] [% IF children.list.size %] ... [% END %] Well, it turns out that the size will always be >= 1, because TT can't seem to handle an empty list. If the method called (parent.children) returns an empty list, TT will substitute the return value with an empty string: '''. I tried to think of a general idiom to check for a non-empty list being returned: [% IF children.defined %] # no, because the empty string is defined [% IF children %] # breaks if you return a single-element list with a zero: ( 0 ) [% IF children != '' %] # breaks if you return a single-element list with an empty string: ( '' ) Of those three, the last one seems to be the least-common valid use case, so I'm thinking I'll use that. It's painfully stupid looking, so I may hide it (actually, the reverse) in an "is_empty" vmethod. I know I can get around this specific DBIx use case by using a resultset instead. However, I just know this will bite me again under other circumstances, and I want to have a workable solution for dealing with empty lists under TT. Has anybody solved this reasonably well? Am I missing something basic? Thanks, Mark _______________________________________________ List: [email protected] Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[email protected]/ Dev site: http://dev.catalyst.perl.org/
