If you move toString outside of Backbone.Model.extend in:
Foo.prototype.toString = function(){ return this.get("name"); };
It works. I would suspect that Backbone does some funky things that don't work properly in IE8
Edit (thanks @Ferdinand Prantl):
All properties passed to Backbone.extend are added to the prototype model using the for-in enumeration. IE < 9 has an error in which it will not copy some properties called DontEnumBug.
Dontenumbug
In IE <9, JScript will skip any property in any object where there is a property of the same name in the prototype chain of the object that has the DontEnum attribute.
toString , valueOf, toLocaleString, prototype, isPrototypeOf, property IsEnumerable, hasOwnProperty, length and unique will be skipped.
source share