2013-02-18 57 views
0

我一直試圖讓grails事件推送插件工作,但似乎無法從savedToDo事件被調用時從服務器響應數據。我可以看到我的控制檯中的日誌傳遞給服務器的數據並執行服務代碼,但客戶端似乎沒有收到響應。我的代碼如下:Grails事件推送插件沒有得到服務器事件響應

MyService.groovy

package eventspush 

import grails.converters.JSON 

import grails.events.* 

class MyService { 

    //will receive client events from 'saveTodo' topic 
    @Listener(namespace='browser') 
    def saveTodo(Map data){ 
     log.info(data) 
     data.moreData = "There we go...." 
     event('savedTodo', data) // will trigger registered browsers on 'savedTodo' topic 
    } 
} 

的conf/MyEvents.groovy

events = { 
    "savedTodo" browser: true, browserFilter: { message, request ->  
    return true 
    } 
} 

index.gsp中

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <r:require modules="grailsEvents"/> 
    <meta name='layout' content='main'/> 
    <r:script> 
    $(document).ready(function() { 

     /* 
     Register a grailsEvents handler for this window, constructor can take a root URL, 
     a path to event-bus servlet and options. There are sensible defaults for each argument 
     */ 
     window.grailsEvents = new grails.Events("${createLink(uri: '')}", {logLevel:"debug", transport:'websocket'}); 

     var data = new Object(); 

     data.name="some name" 

     grailsEvents.send('saveTodo', data); //will send data to server topic 'saveTodo' 
     grailsEvents.on('savedTodo', function (data) { 
     console.log(data) 
     }, {}); 


    }); 
    </r:script> 
</head> 

我的問題是,我沒有看到在控制檯中記錄任何數據。有人知道我做錯了什麼嗎?

編輯,我已經制定了什麼是錯的,我也相應更新MyEvents.groovy,上面的代碼現在工作

+0

的基本文件(這裏)(HTTPS:/ /github.com/smaldini/grails-events-push)沒有服務方法的返回類型。檢查它是否在沒有「def」部分的情況下工作。 – uchamp 2013-02-19 06:07:05

+0

您可能想要嘗試的另一件事是JavaScript中新事件(...)的硬編碼地址。 – uchamp 2013-02-19 06:09:10

+0

新事件(URI)的URI應該指向什麼? – 2013-02-19 12:51:40

回答

0

看來你已經添加了「savedTodo」映射到PushEvents.groovy文件中Plugin目錄。 這是錯的!

你應該在自己的項目的conf文件夾中添加自己的*Events.groovy文件,並離開PushEvents.groovy文件插件不變的!

其他代碼看起來不錯,到目前爲止;)

有在index.gsp你的JavaScript部分中的錯字:

記載:

grailsEvents.send('saveTodo', data); 

當它應該是:

grailsEvents.send('savedTodo', data); 

you omitt編輯「D」...;)

+0

這不是一個錯字,有一個保存事件 - >對象保存 - >保存事件,但感謝您的輸入,因爲你正確的事件關閉是在錯誤的地方。謝謝 – 2013-02-20 13:12:58

0

所以我發現什麼導致數據沒有被推送到客戶端。

我編輯的行中MyService.groovy

event('savedTodo', data)

event(topic:'savedTodo', data:data)

它現在正在按預期

+1

感謝您找到解決方案並分享d與我們;) – herom 2013-02-20 15:55:11

+0

沒問題,但你會有什麼想法嗎? http://stackoverflow.com/questions/14981682/how-to-dynamically-create-a-new-a-topic-using-events-push-plugin – 2013-02-20 17:02:26