Looks like 4.0 may have broken it
Just loaded up the thing in a new install to play with it and the preview has stopped working.
I assume it has something to do with extending one of the media views, but I haven't poked at the JS enough to know what's up. It looks to have a loading screen for media:

Just a friendly FYI :-)
Alright, had a chance to look through things. The register method changed quite a bit in 4.0.
Here it is in 3.9:
register: function( type, constructor ) {
views[ type ] = constructor;
}
and here it is in 4.0:
register: function( type, constructor ) {
var defaultConstructor = {
type: type,
View: {},
toView: function( content ) {
var match = wp.shortcode.next( this.type, content );
if ( ! match ) {
return;
}
return {
index: match.index,
content: match.content,
options: {
shortcode: match.shortcode
}
};
}
};
constructor = _.defaults( constructor, defaultConstructor );
constructor.View = wp.mce.View.extend( constructor.View );
views[ type ] = constructor;
}
The register method is being helpful and extending the wp.mce.Vew for us, that is already being done at line 239 of example-thing.js. The Backbone extend method expects an object, but we're passing it a constructor function. If you remove the extend call at line 239 and just pass the object as the view, it starts working fine.
View: {
className: 'editor-thing',
template: media.template( 'editor-thing' ),
initialize: function( options ) {
this.shortcode = options.shortcode;
},
getHtml: function() {
return this.template( _.defaults(
this.shortcode.attrs.named,
thing.defaults
) );
}
},
This simple fix gets things going, but it looks like there was a lot of changes in the MCE views which renders some of the code in the example thing unnecessary. I'm still playing with it, may get to a pull request at some point.
Either way, thanks much for the example!