[Dev] Generalizing Block.contents

Donn Denman donn at osafoundation.org
Thu Oct 21 11:26:32 PDT 2004


One of the great ideas in CPIA is the notion of block contents.  You 
determine what's displayed in a block by simply setting the "contents" 
attribute.  You want your block to display something else?  Just assign 
a new value to the contents attribute.  Easy!

Currently we use contents with Table and List blocks to display 
ItemCollections.  The Sidebar and Summary Views are good examples.  But 
some blocks, like the Detail View, are not designed to display multiple 
items.  Rather they tend to display a single item, or a single 
attribute of an item.  In these cases we're not yet using the 
"contents" attribute to determine which value should be displayed.  It 
would be nice to extend the notion of a block's contents to include 
these single Items and attributes too.

How should we do this?  There seem to be three natural choices for a 
more general notion of contents:
    1) Any Item can be used.  Since ItemCollections are themselves 
items, they are included too.
    2) An Item/Attribute combination.  This allows us to refer to a 
particular attribute as well as covering the above Item cases.
    3) Some more general notion of a data value, perhaps anything that 
the repository can hold in an attribute.

Whatever we choose to allow in contents, those values must support a 
small API: the block needs to be notified when the value changes, so 
the block can redisplay the new value.  We do this currently by 
subscribing to change notifications.  That's not so easy for case #3, 
where the value could be a string or other constant data.  Presumably 
we could use exception handling to "try" the API, and just leave the 
block's display constant if the value doesn't implement the API.

For the 0.5 release I hope to update the Detail View to use one of 
these schemes.  I like the simplicity of Option 1, and it seems natural 
that Items should be able to tell you when they change.  Option 2 looks 
good because this Item/Attribute descriptor is what's currently used to 
select an appropriate Attribute Editor for Attribute Editor blocks.  
Option 3 seems too general to be easily implemented.

Your comments are welcome.

- Donn Denman




More information about the Dev mailing list