Grails event-push发送事件两次或不发送IE8

时间:2013-02-19 14:55:22

标签: events grails internet-explorer-8 grails-2.2

我使用带有IE8的grails event-push插件有一个奇怪的行为。  我正在使用grails 2.2,事件推送1.0M7以及AngularJS(但这不应该是问题)。

我已在conf dir

中的MyEvents.groovy中定义了该事件
events = {
    'newActivity' browser:true
}

以下是将事件发送到浏览器的服务方法

@Listener(namespace='browser')
public void sendEvents(UserLevel level, Map<String,List<UserAchievement>> achievements, Map<String,List<UserMission>> missions){
    def activities = []
    if (level)
        activities << new RecentActivity(level)

    achievements["user"]?.each{activities << new RecentActivity(it)}
    achievements["team"]?.each{ activities << new RecentActivity(it)}

    missions["user"]?.each{activities << new RecentActivity(it)}
    missions["team"]?.each{activities << new RecentActivity(it)}

    if (activities && activities.size()>0)
        event(topic:"newActivity",data:activities)
}

这里是js事件监听器

grailsEvents.on("newActivity",function(data){
    for (var i=0;i<data.length;i++){//Add
        changeUserImage(data[i]);
        $scope.$apply(function(){$scope.activities.unshift(data[i]);});
    }
    while ($scope.activities.length>$scope.maxElements){ //remove
        $scope.$apply(function(){$scope.activities.pop();});
    }
});

编辑:这些是我尝试过的grailsEvents inicializations,结果相同:

window.grailsEvents = new grails.Events($jostalan.urls.base);
window.grailsEvents = new grails.Events($jostalan.urls.base, {transport:"websocket"});
window.grailsEvents = new grails.Events($jostalan.urls.base, {transport:"websocket",shared:true});

我知道有时候这个事件会被调用两次而其他事件都没有,因为我已经尝试过放置一个console.log,但我删除它只是为了防止IE8出现问题。此外,在Chrome和Firefox中,一切都按预期工作,只需在预期时调用该方法。

我见过的唯一一件对我来说听起来很奇怪的事情(因为我真的不明白这意味着什么),有时我会在grails控制台中看到以下痕迹:

grails> cpr.AtmosphereFramework If you have more than one Connector enabled, make sure they both use the same protocol, e.g NIO/APR or HTTP for all. If not, org.atmosphere.container.BlockingIOCometSupport will be used and cannot be changed.

任何人都知道为什么会发生这种奇怪的行为以及如何解决它?

编辑:我还使用普通的javascript测试了它,并发生了同样的奇怪行为。有时会调用该事件,有时不会,有时两次

编辑:我也尝试从服务方法中删除@Listener注释,因为我知道没有必要。

0 个答案:

没有答案