This version is out of date, covering development from v4.6.0 to v4.7.1. It is maintained here only for inbound reference links from elsewhere.
Jump to the current version of aTbRef.
|A Tinderbox Reference File : Attributes : Setting an attribute to re-enable inheritance||aTbRef Site Map|
Setting an attribute to re-enable inheritance
Once an attribute has been explicitly set (i.e. not via inheritance) to a non-default value, Tinderbox inheritance no longer occurs. This is deliberate, the rationale being that the user wants that note's attribute to retain the value; maintaining inheritance might cause the user-set value to be unintentionally over-written.
This can catch out the new user when prototypes are in use. One of the strengths of prototypes is that a change to the prototype is instantly imposed on all notes using that prototype - except where a note's attribute has been explicitly changed.
A very simplistic example might be where a prototype sets note $Color, e.g. 'blue'. If the user sets a note using the prototype to $Color 'green', if the prototype's $Color is then changed to 'red' all the other note's using the prototype will go red - but not the one explicitly changed to green. Many new users would expect them all to go red.
So, fine if the user wanted to take an attribute out of the inheritance stream - but what if it was a mistake. In the above scenario, if the user reset the changed note's $Color back to 'blue' would inheritance re-occur? No. That is because whilst the inherited colour is 'green', an explicitly set value is still seen as an explicitly set (i.e. non-inherited) value even if the same as the notional inherited value.
An easy way to confirm if an attribute is inherited or not is to open its Info view (Cmd+Opt+i). Attribute names are listed on the left column (for the attribute type/section being displayed). Attributes being inherited are listed in grey text, explicitly set (and thus non-inheriting) attributes are listed in black text.
How is inheritance re-enabled?
The trick is to set the attribute value to no value - something you can't do by typing into a value input box (e.g. as in displayed Key Attributes). For a string attribute setting no text is doing this in code:
...whereas we need to use this special syntax (regardless of attribute data type - note no quotes are used around the semicolon):
The resetting process can be done in three ways:
Doing any of these will result in that attribute for that note having its inheritance restored.
|Previous: Setting an attribute to (no value)|
Licensed under Creative Commons Attribution-Noncommercial-Share Alike 3.0 License
[See aTbRef CC licence Attribution/Waiver info info]