我已经看到了其他问题,我觉得我的问题是这些问题的重复。
breezejs [q]未经拒绝的原因(应该为空)
未接受的拒绝原因(应该为空)
好吧,我一直在Breezejs上进行跟进;在文档尽可能近以及样品之后,我一直遇到同样的问题。我将在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" });
}
}
这是我从Angular Controller称呼它的方式:
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
});
然后在所有浏览器中都可以使用。但是我想打开元数据,以便可以进行缓存。但是,我最关心的是,即使我解决了这个问题,我也不知道Caching是否仍会在IE7中起作用。
即使我喜欢Breezejs,并且它与Google Chrome非常合理,但我花了几个小时,几天,几周和头痛使我想在IE7中工作。添加疯狂的浏览器支持脚本,IE-Shivs和IE-Shims ..非常接近,然后不支持LocalStorage。我希望Breezejs能够记录更多有关IE7中不支持的内容,我有很大一部分使用IE7和IE8的客户,并且很难编程,并在下班后发现它不起作用。<<<<<<<<<<<<<<<</p>
我并不是要把责任归咎于微风技术。我意识到这也是一面的事情。但是,我已经在IE7上进行了Breeze Angular的作品实现了该应用程序。只需关闭一些功能即可。
(弃用方式)
我决定以一种可以检测旧版本的IE并制作混合物的方式"版本"我的JavaScript:
在JavaScript中检测IE版本
因此,在我的JavaScript代码中,我会检测到是否正在使用较旧的IE浏览器,然后从那里重新打开我如何获取数据;如果使用了较新的浏览器,我会占用Breezejs Angular的优势。
(有用的建议)
这有点令人失望。
要优雅地处理查询,我已经阅读了一篇文章(并与作者讨论)有关查询/处理程序模式:
https://cuttingedge.it/blogs/steven/pivot/entry.php?id=92
对于任何想要淘汰赛(仅仅是为了支持较旧的浏览器)的人,请查看durandal:http://durandaljs.com/(似乎正在获得对淘汰赛和角色的粉丝的支持)
(更新-08/11/2014-我删除了浏览器中提到的[IF LT IE8]的逻辑,并通过控制器中的JavaScript通过JavaScript进行处理。我还删除了所有浏览器上的缓存功能,服务器处理工作工作,可以很好地适应
由于Angular不太支持IE7,因此我将代码分为两个不同的页面,一个称为HOME.HTML和HOMEIE7.HTML。尽管它是更多的维护,但我认为它比在一个HTML页面中拥有两组逻辑要好。对于我所做的任何更改,我使用一个名为"超越比较"的程序,该程序使我可以分析两个文件并确保两者之间的逻辑相同。
要在两页之间切换,这是我的起始index.html的样子:
<!DOCTYPE html>
<div ng-app="mapapp" id="ng-app">
<div ng-controller="LocationCtrl">
<div ng-include="homeHTML" />
</div>
</div>
在您的控制器中:
//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();
请记住,如果您使用的是IE7,请确保在Breeze的服务电话中关闭HasserverMetadata。
var dataService = new breeze.DataService({
serviceName: serviceName,
hasServerMetadata: false
});
由于IE7无法使用使用服务器元数据的任何可扩展功能。要了解这些可扩展的功能,请单击以下:微风元数据
随着HasserverMetadata关闭,您的实体的响应看起来就像常规的JavaScript对象。如果打开了,并且您不使用IE7,那将是一个可以缓存并对其进行查询的实体对象。
微风 Angular在IE8或更早的情况下不起作用。对不起,您花了很长时间才发现这一点。很抱歉您对支持IE7和IE8的需要感到诅咒;那是一个艰难的任务。
从一开始,我们就在文档中对此进行了非常清楚的。例如,请参阅上的" todo tody sampe"上的大蓝色通知框" 和微风/角页上的。
用"微风角IE8"一词搜索stackoverflow返回了2013年1月的问题和答案,我们再次说明,微观和角度的组合不起作用,并且在IE8或任何浏览器中都无法正常工作或任何浏览器缺乏对ecmascript 5属性的支持。
您是否知道Angular团队还在1.X版本的所有版本中都放弃了对IE8的支持?他们说 May 在IE8中起作用,但他们不会进一步尝试确保它确实……他们也不会打扰测试以查看是否做到。
我应该补充说,尽管我们也停止了IE8上的微风测试。
最后,让我说我给您留下了深刻的印象,您能够轻而易举地使用IE7的角度工作。祝您在努力中一切顺利。