我正在和Django一起使用Haystack和Whoosh
在search_index.py中我有这个
class PageIndex(RealTimeSearchIndex):
text = CharField(document=True, use_template=True)
creator = CharField(model_attr='creator')
created = DateTimeField(model_attr='created')
org = CharField(model_attr='organisation')
site.register(Page, PageIndex)
Run Code Online (Sandbox Code Playgroud)
我的模板看起来像这样
{{ object.name }}
{{ object.description }}
{{ object.template|striptags }}
{% for k,v in object.get_variables.items %}
{{ v }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
如果我使用更新的名称或描述保存页面,则会立即更新并包含模板中get_variables.items的变量.但是,如果我只更新变量,那么它不会更新.
是因为变量是与它相关的另一个对象,即使我在同一页面上保存它也不会对页面进行更改吗?如果是这样,当我更新相关对象时,如何强制更新页面项?
我已经构建了一个简单的Web应用程序,它使用socket.io通过node.js服务器进行一些通信.
当用户连接时,节点会传回信息,告知客户端订阅某些事件.这很好.
但是,如果您让浏览器设置为空闲,则客户端最终会订阅两次事件.订阅过程如下:
当用户连接node.js时会收到"adduser"消息
这个功能的两个关键因素是:
socket.on('adduser', function(data)
<snip>
socket.emit('nodeinfo', {node_id: NODE_ID});
socket.emit('update', {msg: 'you are connected'});
Run Code Online (Sandbox Code Playgroud)
socket.emit('nodeinfo')通知客户端订阅事件.
所以客户有
socket.on('nodeinfo', function(data) { ... }
Run Code Online (Sandbox Code Playgroud)
事情是它永远不会说'你连接'两次,'adduser'中的console.log()函数都没有在节点端再次被调用.似乎唯一发生的事情是node.js再次发出nodeinfo(或者客户端认为)导致客户端重新订阅.
任何人都可以向我解释socket.io工作中如何重新连接以及如何发生这种情况?