javascript-如何使用Neo4j Reactivity驱动程序发布/订阅Meteor
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-如何使用Neo4j Reactivity驱动程序发布/订阅Meteor,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3506字,纯文字阅读大概需要6分钟。
内容图文
我正在使用Meteor应用程序,您可以在其中创建Neo4j“ Room”节点和“ DOOR”关系.每个房间只能有一个通往其他房间的门.
我正在使用Dmitriy Aristarkhovich的Neo4j Reactivity驱动程序.
我想创建一个实时的主从系统,其中用户做出的选择会影响其他可能的选择.
为了说明这一点,在端口7474上的Neo4j浏览器中,我创建了一个简单的房间网络,如下所示:
CREATE
(a:Room {name: "Room 1"})
-[:DOOR]->
(b:Room {name: "Room 2"}),
a-[:DOOR]->
(c:Room {name: "Room 3"}),
b-[:DOOR]->a
RETURN a, b, c
在此架构中:
> 1号房已经拥有它可以拥有的所有出门
> 2号房间可以通过门链接到3号房间
> 3号房间可以同时链接到1号房间和2号房间
我想显示两个下拉菜单:
>主菜单选择门的起步室
>从属菜单,从给定起始房间的可能的结束房间中进行选择.
这是我用来创建这些菜单的流星风味HTML:
<body>
{{> addDoor}}
</body>
<template name="addDoor">
<p>Add a Door from
<select id="fromRoomName">
{{#each fromRooms}}
{{> fromRoom}}
{{/each}}
</select>
to:
<select id="toRoomName">
{{#each toRooms}}
{{> toRoom}}
{{/each}}
</select>
</p>
</template>
<template name="fromRoom">
<option value="{{name}}">{{name}}</option>
</template>
<template name="toRoom">
<option value="{{name}}">{{name}}</option>
</template>
在主菜单中选择Room 3时,这些菜单应该是这样.
这是我正在使用的JavaScript:
var queries = {
"roomsForNewDoors": {
collection: Meteor.neo4j.collection("RoomsForNewDoors")
, query:
"MATCH (entrance:Room), (exit:Room) " +
"WHERE NOT (entrance)-[:DOOR]->(exit) " +
"AND entrance <> exit " +
"RETURN entrance"
, link: "entrance"
}
, "newDoorsForRoom": {
collection: Meteor.neo4j.collection("NewDoorsForRoom")
, query:
"MATCH (entrance:Room), (exit:Room) " +
"WHERE entrance.name = '{name}' " +
"AND NOT (entrance)-[:DOOR]->(exit) " +
"AND entrance <> exit " +
"RETURN exit"
, options: {name: "Room 2"}
, link: "exit"
}
}
if (Meteor.isServer) {
;(function (){
var queryKeys = Object.keys(queries)
queryKeys.forEach(publish)
function publish(key) {
var queryData = queries[key]
var query = queryData.query
var collection = queryData.collection
collection.publish(key, publishCallback)
function publishCallback(){
return query
}
}
})()
}
if (Meteor.isClient) {
Tracker.autorun(function createSubscriptions(){
var queryKeys = Object.keys(queries)
queryKeys.forEach(subscribe)
function subscribe(key) { //, index, array){
var queryData = queries[key]
var options = queryData.options
var link = queryData.link
var collection = queryData.collection
var subscription = collection.subscribe(key, options, link)
}
})
function getResults(queryData) {
var collection = queryData.collection
var cursor = collection.find()
return cursor
}
Template.addDoor.events({
'change #fromRoomName': function () {
var fromRoomId = $("#fromRoomName :selected").text()
Session.set("fromRoomId", fromRoomId)
}
})
Template.addDoor.helpers({
fromRooms: function() {
var results = getResults(queries.roomsForNewDoors)
return results
}
, toRooms: function () {
var key = "newDoorsForRoom"
var queryData = queries[key]
var options = { name: Session.get("fromRoomId") }
var link = queryData.link
var collection = queryData.collection
collection.subscribe(key, options, link)
var results = getResults(queryData)
return results
}
})
}
当我在Neo4j浏览器中测试两个MATCH查询时(例如,使用“ Room 2”而不是“ {name}”),我得到的正是我期望的结果.使用Neo4j Reactivity驱动程序,第一个MATCH查询运行良好,但是第二个查询会产生一组空结果.
我怀疑我不了解发布/订阅过程的一些基本知识.我将不胜感激能使该功能正常工作.
完整的项目在这里可用:
git clone git@github.com:blackslate/Neo4j-issues.git
解决方法:
这可能不是发布/订阅问题.尝试删除{name}参数周围的引号.
也就是说,更改:
"WHERE entrance.name = '{name}' "
至:
"WHERE entrance.name = {name} ".
内容总结
以上是互联网集市为您收集整理的javascript-如何使用Neo4j Reactivity驱动程序发布/订阅Meteor全部内容,希望文章能够帮你解决javascript-如何使用Neo4j Reactivity驱动程序发布/订阅Meteor所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。