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

Kris Zyp kzyp at dojotoolkit.org
Wed Mar 10 10:37:19 EST 2010



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