[dojo-contributors] Watchables, data bindings, and get/set

Bill Keese bill at dojotoolkit.org
Wed Mar 10 10:53:39 EST 2010


Maybe I misspoke about DTL, I know it has some kind of binding (maybe to 
dojo.data?) but I don't know the details.   Hopefully someone else can 
explain.

About attributeMap, like you said, it is for routing attribute changes 
to DOM changes.... that seemed to be what you were talking about with your

	<div>${obj.get("foo")}</div>

example.


Kris Zyp wrote:
> On 3/9/2010 9:49 PM, Bill Keese wrote:
>   
>> A few more comments/questions:
>>
>>   
>>     
>>> I wanted to propose having a pattern of providing the ability to monitor
>>> stateful objects in dojo with a watch() method. The watch method would
>>> be based on Mozilla's Object.prototype.watch [1]:
>>> obj.watch(propertyName, callback); // monitor a property
>>> or
>>> obj.watch(callback); // monitor any property change for that object
>>> The two primary types of objects that I would like to be able to monitor
>>> are widgets and data store objects. We have recently discussed using a
>>> different data/object store approach whereby data store objects could be
>>> provide a consistent set of methods, and watch() could certainly be one
>>> of them. We could also easily add watch to dijit._Widget and deliver
>>> notifications to listeners for any attribute changes. The ability to
>>> watch an object would be discerned with feature detection (the presence
>>> of obj.watch), but would hopefully be available at least on all widgets
>>> (although user objects could implement this ability as well).
>>>   
>>>     
>>>       
>> Sounds cool, seems to supersede connections to widgets' attr() and 
>> onChange() methods.
>>
>> How would this be used with declarative widgets?
>>   
>>     
>
> We could try to come up with some way of inserting watches in widget
> declarations, although the primary use case is programmatic attribute
> access that wishes to be notified of changes.
>   
>>   
>>     
>>> One of the primary motivations for this design, is would enable building
>>> functionally reactive "live" templating engines or data-bindings on top
>>> of Dojo. The concepts of functional reactive design (or data-bindings)
>>> have been demonstrated in other projects like Flex, Flapjax [2], and Fin
>>> [3]. There recently has been interest expressed in developing a template
>>> language with these type of data-binding capabilities that could run on
>>> Dojo, where one could write something like:
>>> <div>${obj.foo}</div>
>>> or
>>> <div>${obj.get("foo")}</div>
>>>
>>> And the variable/object property would be evaluated when the template is
>>> executed, and the templating engine would then automatically "watch" the
>>> obj's foo property for any changes and automatically rerender the
>>> template when the value changes. This is a powerful concept because it
>>> can remove a significant amount of user code for event propagation and
>>> rerendering.
>>>   
>>>     
>>>       
>> Sounds cool.  DTL already does this but having framework support too is 
>> a good thing.
>>   
>>     
>
> Can you point me to how this works? I see in the code that there are
> data events, but they seem like they would require manual triggering.
>   
>> Also, attributeMap is already designed for this purpose, it essentially 
>> sets up watches on specified widget attributes, and reflects those 
>> changes into the widget's DOM.  I'm not against something better though.
>>   
>>     
>
> I thought this was for routing attribute changes to DOM changes. How
> would you monitor user-specified attributes from outside the widget with
> attributeMap?
>
> Thanks,
> Kris
>   


More information about the dojo-contributors mailing list