views:

49

answers:

2

Hi folks,

I need to know if I am going about something the right way.

For a given page, I am instantiating an object for the page itself. Let's call that object myPage. Within the page I have containers (usually div tags). When I go to an admin component to work with a specific div, I instantiate an object for that as well. Let's call that myDiv.

Now, one of the things I want to work with for a given div is the styling of that div. So normally I would think that I'd just put in some style-related methods, such as myDiv.getPadding() or myDiv.getBackgroundColor(), etc.

But it occurs to me that I may eventually have other objects for which I may also need to do style-related stuff.

Given this, should I then create a separate style.cfc? Would that then be extended by the div object? Or would the style object extend the div object? My understanding is that the more specific object extends the less specific one, but I am not sure which is more specific in this case: is it the div object, which references a specific div, or the style object, which provides a specific set of data?

Thanks in advance!

+3  A: 

First, unless you need to write styles on-the-fly, I would create one or more stylesheets and link them dynamically, instead of creating them dynamically.

Assuming, however, that you do need to create them on-the-fly...

I would not have either the control (div) extend the style or vice-versa. A style is not a more specific definition of a div, nor is the reverse true. What I would do is create a style object that only contains the display meta-data for a given element or element set. This can be contained within your control/div object (not an extension), or can be part of the page object. The style is definitely related to the control, but I would not combine them, as that makes it harder to separate content and presentation.

Ben Doom
Definitely a better way to go. I am all for a complete divorce of your CF code and CSS code. I would avoid writing any actual styling with CF and do what Ben advocates, dynamically changing the Style Sheet linked to.
Daniel Sellers
I'm not developing style sheets that will load dynamically. I am using CF to write static stylesheets, but I want the values in those stylesheets to be customizable by my users.
Gary
I would write a per-user stylesheet using cffile, and load it dynamically. This way, you only write it when changes are made, not every time the page is loaded.
Ben Doom
A: 

By no means am I saying this is the best approach, but if you really wanted to use CFCs to style your pages, you could have a DivTag.cfc extend an HtmlTag.cfc, which would act as your base class for all HTML tags. You could then compose a StyleAttribute.cfc into your HtmlTag.cfc to work with any style properties, such as background colors and padding. So then you would end up calling functions like myDiv.getStyle().getPadding().

In general, you should really try to favor composition ("has a") over inheritance ("is a") and not get too crazy with your component hierarchies. In this case, I'd recommend using CSS files to style your pages.

Tony Nelson