I didn't mean to put the blame squarely on Breeze technology for my application. I realized late that it was also an angular thing. However, I have implemented the application in such away that Breeze + Angular works on IE7. Just have to turn off a few features.
(Deprecated way)
I've decided to "version" my javascript in a manner where i can detect older versions of IE and make accomadations:
Detect IE version in Javascript
So in my javascript code, I'd detect if an older IE browser is being used, and from there rewire how I'm fetching data; where if newer browsers are being used, I'd take advantages of BreezeJS + Angular.
(Useful advice)
It's a bit disappointing that it has come to this.
To gracefully handle querying, I've read a post (and talked to the author) about query/handlers pattern described here:
https://cuttingedge.it/blogs/steven/pivot/entry.php?id=92
For anyone who wants an angular-like framework with knockout (just to support older browsers), check out durandal: http://durandaljs.com/ (which seems to be gaining support for knockout and angular fans)
(Update - 08/11/2014 - I removed the logic mentioned about [if lt IE8] in the browser and handled through javascript in my controller. I also removed the caching ability on all browsers, server handling worked just fine with what was needed
Since angular doesn't support IE7 very well, I split up the code into two different pages, one called Home.html and HomeIE7.html. Although it is more maintenance, I think it's better than having two sets of logic in one html page. For any changes I made, I use a program called "Beyond Compare", which allows me to analyze both files and make sure the logic is the same between the two.
To switch between the two pages, this is what my starting Index.html looks like:
<!DOCTYPE html>
<div ng-app="mapapp" id="ng-app">
<div ng-controller="LocationCtrl">
<div ng-include="homeHTML" />
</div>
</div>
and in your controller:
//templates to use - picks html to use, and doesn't use the ajax caching
$scope.homeHTML = !$('html').hasClass('msie7') ?
"Templates/Home.html?" + new Date().getTime() :
"Templates/HomeIE7.html?" + new Date().getTime();
Remember, if you are using IE7, make sure in your service call from breeze that hasServerMetadata is turned off.
var dataService = new breeze.DataService({
serviceName: serviceName,
hasServerMetadata: false
});
As IE7 is incapable of making use of any extensible features of using server metadata. To know those extensible features, please click on the following: Breeze Metadata
With hasServerMetadata turned off, the response of your entities will look just like a regular javascript object. If it was turned on, and you don't use IE7, it would have been an entity object that you can cache and make queries against.