1

IE8 で grails event-push プラグインを使用すると、奇妙な動作が発生します。私はgrails 2.2、event-push 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の初期化です:

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 を入れてみたので、イベントが 2 回呼び出されたり、まったく呼び出されなかったりすることがありますが、IE8 の問題を防ぐためだけに削除しました。また、Chrome と Firefox では、すべてが期待どおりに機能し、期待どおりにメソッドを 1 回呼び出すだけです。

私にとって奇妙に聞こえる唯一のこと (意味がよくわからないため) は、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でもテストしましたが、同じ奇妙な動作が発生します。イベントが呼び出される場合もあれば、呼び出されない場合もあれば、2 回呼び出される場合もあります

編集:必要ではないことを理解しているため、サービスメソッドから @Listener アノテーションを削除しようとしました。

4

0 に答える 0