我已经看到其他问题提出这个问题,我不觉得我的问题与这些问题重复。
好的,所以我一直在关注breathjs;尽可能接近文档以及示例,但我一直遇到同样的问题。我将展示的代码在 IE9+ 和 Chrome 中运行,但是当我在 IE7 和 IE8 中尝试它时,它就崩溃了。
这是我的服务器端控制器(使用 webapi 2):
namespace Map.API.Controllers
{
[BreezeController]
public class LocationController : ApiController
{
readonly EFContextProvider<LocationEntities> _contextProvider =
new EFContextProvider<LocationEntities>();
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
[HttpGet]
public IQueryable<dbSTATES> States()
{
return _contextProvider.Context.MD_STATE_CD;
}
}
}
这是我的角度工厂:
mapapp.app.factory('StateContext', ['$http', 'StateModel', function ($http, StateModel) {
configureBreeze();
var dataService = new breeze.DataService({
serviceName: "/Map.API/api/Location"
});
var datacontext = {
getAllStates: getAllStates,
getCachedStates: getCachedStates
};
return datacontext;
/* BLOWS UP AFTER RUNNING MANAGER.EXECUTEQUERY(QUERY) */
function getAllStates() {
var query = breeze.EntityQuery
.from("States");
return manager.executeQuery(query);
}
function getCachedStates() {
var query = breeze.EntityQuery
.from("States").toType('MD_STATE_CD');
return manager.executeQueryLocally(query);
}
function configureBreeze() {
// configure to use webapi
breeze.config.initializeAdapterInstances({ dataService: "webApi" });
}
}
这是我从我的角度控制器中调用它的方式:
StateContext.getAllStates().then(
function (data) {
var localData = data.results; //never gets here
logger.info("Fetched States");
}).fail(function (e) {
logger.info(e); //always gets here
}).done();
同样,这在现代浏览器中运行良好,但在 IE7 和 IE8 中崩溃了。在进行了大量研究之后,没有任何消息来源提到这会失败。尽管 BreezeJS 文档提到了一些在 IE7 中失败的事情,但应该有明确的信息说这永远不会起作用。
如果我碰巧关闭了元数据:
var dataService = new breeze.DataService({
serviceName: "/Map.API/api/Location",
hasServerMetadata: false
});
那么这适用于所有浏览器。但我想打开元数据,以便进行缓存。但是,我最担心的是,即使我得到了这个修复,我也不知道缓存是否仍然可以在 IE7 中工作。
尽管我喜欢 BreezeJS 并且它在 google chrome 上的表现非常出色,但我花了数小时、数天、数周和头疼的时间来制作我想要在 IE7 中工作的东西。添加疯狂数量的浏览器支持脚本,ie-shivs 和 ie-shims.. 如此接近,然后发现 localStorage 不受支持。我希望 BreezeJS 能够记录更多关于 IE7 不支持的内容,我有很大一部分客户使用 IE7 和 IE8,并且很难对事物进行编程并在数小时后发现它不起作用。