我刚刚发现了slack.com,我爱上了他们处理界面的方式。如果您从未使用它,那么它很容易:
右边有一个侧导航栏和一个主容器。每次单击侧面导航栏中的项目时,它的内容都会加载到容器中。重点项目发生变化,容器内容发生变化,但页面没有重新加载。
如果数据在此期间发生变化,则会神奇地更新。
实现这样的目标需要什么?
过去几天我一直在看meteorjs但是网址部分从未被提及过。
答案 0 :(得分:2)
是。 Slack太棒了。我们(我的团队)每天都使用它。我经常使用它,在某些时候我不检查电子邮件,但我查看了松弛。
所以,直到你的问题。
可以通过javascript [Tl; dr]
轻松完成代码:
window.history.pushState("object or string", "Title", "/new-url");
这可以通过两种方式完成, 一世。通过Ajax和Javascript II。通过插座
我。通过Ajax和Javascript: 在javascript中你可以使setTimeout函数在一段时间内触发ajax请求。通过Ajax,它将从后端获得最新消息,并将显示。
II。通过插座: 在socket中,在你使用node.js的情况下,有一个非常流行的库socket.io,它将实时获取和更新消息。
祝你好运!答案 1 :(得分:1)
你需要Ajax。您可以将它与脚本结合使用,可能是PHP,它通过定时器间隔检查数据库的状态("心跳"),如果有任何更改,则加载新数据。我建议将日期时间戳的特定列与之进行比较,以便在此时对数据库进行尽可能小的加载,因为很多用户同时在页面上会产生大量请求。
答案 2 :(得分:0)
对于"网址更改功能但没有重新加载",我认为@Kavan Pancholi回答了您的问题。实现这一目标的另一种方法是使用iron-router的yield templates功能。
你正在使用meteor,这意味着你可以这样做而不会有太多麻烦(忘记Ajax和套接字)。
我不知道Slack(但我肯定会看一下)但据我所知,所有数据都是预加载/延迟加载的,它们只会更改显示的元素。换句话说,您可以随时准备并加载所有客户订阅,或者在加载yield模板时将其启动。
如果我发现我没有正确理解你的目标,我会看看Slack并编辑它。
修改确定我试过了。你需要使用带有铁路由器的yield模板,并且他们还添加了一些你可以使用_uihooks +加载模板实现的过渡效果
答案 3 :(得分:0)
最重要的是,如果你使用像angular这样的框架,你会注意到这样的网址:
您可能已经看到类似于维基百科的类似网址:
那个小<polymer-element name="custom-selector" attributes="host data">
<template>
<core-ajax
id="employeesgetter"
handleAs="json"
url="dosql"
on-core-error="{{onError}}"
response="{{data}}">
</core-ajax>
<paper-dropdown-menu label="Dropdown with Data" on-core-select="{{selectData}}">
<paper-dropdown class="dropdown">
<core-menu class="menu">
<template repeat="{{employee in data.employees}}">
<paper-item name="{{employee.firstName}}">{{employee.firstName}}</paper-item>
</template>
</core-menu>
</paper-dropdown>
</paper-dropdown-menu>
</template>
<script>
Polymer('custom-selector', {
data: {
employees: []
},
ready: function () {
console.log('firing ready');
this.host = this.host || 'example.com';
this.$.employeesgetter.go();
},
onError: function (e, resp) {
console.log('onError');
console.log('error!: ' + resp.response);
}
});
</script>
</polymer-element>
不会在网址上重新加载页面,因此您可以使用它来制作网址路由操作,而无需更改网页。您可以使用#
访问它。所以在维基百科的文章中,你得到了
window.location.hash
将它与ajax和事件监听器结合起来,你可以做类似的事情。
> window.location.hash
#Cats_and_humans