created: 20190205023543910
modified: 20190217012121130
tags: 
title: Widget attributes tutorial part II
type: text/vnd.tiddlywiki

This example will build on the previous one. The only modification will be to add a check to the `refresh` method. The `refreshSelf` will only be called if a change to the attributes is detected.

The `computeAttributes` method returns a Javascript object containing properties for each attribute which has changed. So a check like `if (changedAttributes.attr1 || changedAttributes.attr2 || changedAttributes.attr3)` etc. can be used to detect the change.  See the refresh method in [[$:/core/modules/widgets/view.js]] for an example showing the check for multiple attributes.

For this example, `message` is the only attribute implemented.

```javascript
/*
Refresh if the attribute value changed since render
*/
MyWidget.prototype.refresh = function(changedTiddlers) {
	// Find which attributes have changed
	var changedAttributes = this.computeAttributes();
	if (changedAttributes.message) {
		this.refreshSelf();
		return true;
	} else {
		return false;
	}
};
```

The full code can be seen at [[hello-attribute-optimized.js]] and here is the result ([[Widget attributes demo II]]):

{{Widget attributes demo II}}

The visible behavior here should be identical to the unoptimized behavior of the previous tutorial.
