You seem to be unaware that RequireJS operates asynchronously. Let's look at your code:
require(['wtt/Eric']);
className='Eric';
var e = new window[className](...);
The first line (require...) will cause RequireJS to initiate loading your module. You do not actually know when the module will be loaded. In fact, given the way JavaScript works, you are guaranteed that by the time var e = new window[className](...); executes, your module will not be loaded and this line will fail. So you have to structure you code so that the line which fails is guaranteed to run after the module is loaded. You do this by passing a callback to require:
require(['wtt/Eric'], function () {
    var e = new window['Eric'](...);
    ...
});
Or even better, don't leak anything in the global space and do:
require(['wtt/Eric'], function (Eric) {
    var e = new Eric();
    ...
});
Regarding the comment you left on the other answer, note that it is possible to compute what module to load at run time:
var mod = document.getElementById("myid").attributes.foo.value;
require(['wtt/' + mod], function (Constructor) {
    var e = new Constructor();
});
If you ever use r.js to combine your modules, you'll have to explicitly list the modules you load in the manner I've just shown above because r.js is not able to follow computed dependencies.