Breezejs:[Q]未经治疗的拒绝原因(应该为空)



我已经看到了其他问题,我觉得我的问题是这些问题的重复。

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的角度工作。祝您在努力中一切顺利。

相关内容

  • 没有找到相关文章

最新更新