On 5. 2. 2015, at 22:38, Samuel Pelletier <[email protected]> wrote:

> The simple fact you care is a bad smell (from Clean Code). By definition, a 
> component should not care about it's parent or childrens, it break the 
> encapsulation principle and component are supposed to manage views only. The 
> only communication between them is via the bindings which are like the public 
> interface of the component. 

On 5. 2. 2015, at 23:01, Robert B. Hanviriyapunt <[email protected]> 
wrote:

> I can’t imagine what “something reasonable” would be that would need to fire 
> in a subcomponent before the start of the appendToResponse (assuming that the 
> component structure is a new structure and not the same as the one that might 
> have previously fired takeValuesFromRequest).

So as to get an immediate response without a need to reload, my standard html 
header contains a javascript, which in some pre-defined intervals polls the 
server and if server says so, the script changes a couple of values in the page 
(marked by appropriate spans).

The trick is that some „plugins“, i.e., components pretty deep in the hierarchy 
and inside of lots of <wo:ifs>, might sometimes need to change the poll 
interval. If the components happen not to be used at all, the script runs with 
the default interval.

My original attempt looked conceptually (leaving out boring details) like this:

=== code ===
class MyRootPage extends ERXComponent {
  int autoRefreshRequestDelay
  void awake {
    int 
autoRefreshRequestDelay=ERXProperties.intForKey('DefaultAutoRefreshRequestDelay')
  }
  ...
}
class MyPlugin extends ERXComponent {
  void awake {
    MyRootPage root=this
    while (root.parent()) root=root.parent()
    
root.autoRefreshRequestDelay=ERXProperties.intForKey('SpecialPluginAutoRefreshRequestDelay')
  }
  ...
}
=== MainPage.html ===
... the script here ...
var refreshDelay=(<wo:str value="$autoRefreshRequestDelay"/>)
... other HTML ...
===

My idea was that all awakes go first, thus the proper delay would be set 
automatically, based on whether the plugin happens to be in the page or not. 
Then, appendToResponse-time, when the page gets rendered, the JS would get the 
proper value.

Self-evidently couldn't work given the JS gets actually rendered before most 
subcomponents (including the plugins) are awaken.

To solve the problem, I simply moved the JavaScript to the very end of the 
MainPage :) For some reason originally I lived under a misconception that all 
javascripts must be at the page header; of course they need not, hell knows 
where I got that dumb idea from.

Well I don't know; perhaps there's a much better and cleaner solution which I 
simply don't see?

Thanks and all the best,
OC


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to