我一直在努力让grails事件推送插件工作,但是当调用savedToDo
事件时,似乎无法从服务器获取响应数据。我可以在我的控制台中看到来自服务器和执行服务代码的数据的日志,但是客户端似乎没有回复响应。我的代码如下:
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 :(得分:0)
您似乎已将'savedTodo'映射添加到PushEvents.groovy
目录中的Plugin
文件中。 这是错误的!
您应该在自己项目的*Events.groovy
文件夹中添加自己的conf
文件,并保持插件的PushEvents.groovy
文件不变!
到目前为止其他代码看起来很好;)
index.gsp
中的JavaScript部分中有一个拼写错误:
它的内容如下:
grailsEvents.send('saveTodo', data);
应该是:
grailsEvents.send('savedTodo', data);
你省略了“d”......;)
答案 1 :(得分:0)
所以我发现了导致数据没有被推送到客户端的原因。
我在MyService.groovy
编辑了
event('savedTodo', data)
到
event(topic:'savedTodo', data:data)
现在按预期工作