会话
Meteor 客户端会话 API 的文档。
Session
在客户端提供一个全局对象,您可以使用它来存储任意一组键值对。使用它来存储诸如列表中当前选中的项目之类的东西。
Session
的特殊之处在于它是响应式的。如果您从模板内部调用 Session.get
('currentList')
,则只要调用 Session.set
('currentList', x)
,模板就会自动重新渲染。
要将 Session
添加到您的应用程序中,请在您的终端中运行以下命令
meteor add session
Session.set仅限客户端
仅限客户端
摘要
在会话中设置变量。通知任何监听器值已更改(例如:重新绘制模板,并重新运行任何调用了此 key
上的 Session.get
的 Tracker.autorun
计算)。
参数
源代码名称 | 类型 | 描述 | 必填 |
---|---|---|---|
key | 字符串 | 要设置的键,例如 | 是 |
value | EJSONable 或 undefined |
| 是 |
import { Session } from 'meteor/session';
import { Tracker } from 'meteor/tracker';
import { Meteor } from 'meteor/meteor';
Tracker.autorun(() => {
Meteor.subscribe('chatHistory', { room: Session.get('currentRoomId') });
});
// Causes the function passed to `Tracker.autorun` to be rerun, so that the
// 'chatHistory' subscription is moved to the room 'home'.
Session.set('currentRoomId', 'home');
Session.set
也可以使用键和值的 对象来调用,这等效于分别对每个键/值对调用 Session.set
。
Session.set({
a: 'foo',
b: 'bar'
});
Session.setDefault仅限客户端
仅限客户端
摘要
如果会话变量之前未设置,则在会话中设置变量。否则,其工作方式与 Session.set
完全相同。
参数
源代码名称 | 类型 | 描述 | 必填 |
---|---|---|---|
key | 字符串 | 要设置的键,例如 | 是 |
value | EJSONable 或 undefined |
| 是 |
import { Session } from "meteor/session";
Session.setDefault(
"key",
{ num: 42 , someProp: "foo" },
);
这在初始化代码中很有用,可以避免在每次加载应用程序的新版本时都重新初始化会话变量。
Session.get仅限客户端
仅限客户端
摘要
获取会话变量的值。如果在 响应式计算 中,则在下一次 Session.set
更改变量的值时使计算无效。这会返回会话值的克隆,因此,如果它是对象或数组,则更改返回的值对存储在会话中的值没有影响。
参数
源代码名称 | 类型 | 描述 | 必填 |
---|---|---|---|
key | 字符串 | 要返回的会话变量的名称 | 是 |
此 Blaze.js 示例
<template name="main">
<p>We've always been at war with {{theEnemy}}.</p>
</template>
Template.main.helpers({
theEnemy() {
return Session.get('enemy');
}
});
Session.set('enemy', 'Eastasia');
// Page will say "We've always been at war with Eastasia"
Session.set('enemy', 'Eurasia');
// Page will change to say "We've always been at war with Eurasia"
Session.equals仅限客户端
仅限客户端
摘要
测试会话变量是否等于某个值。如果在 响应式计算 中,则在下一次变量更改为或从该值更改时使计算无效。
参数
源代码名称 | 类型 | 描述 | 必填 |
---|---|---|---|
key | 字符串 | 要测试的会话变量的名称 | 是 |
value | 字符串、数字、布尔值、null 或 undefined | 要测试的值 | 是 |
import { Session } from "meteor/session";
Session.equals(
"key",
"value",
);
如果 value 是标量,则这两个表达式执行相同的操作
Session.get('key') === value
Session.equals('key', value)
…但第二个总是更好。它触发的失效(模板重新绘制)更少,使您的程序更有效率。
此 Blaze.js 示例
<template name="postsView">
{{#each posts}}
{{> postItem}}
{{/each}}
</template>
<template name="postItem">
<div class="{{postClass}}">{{title}}</div>
</template>
Template.postsView.helpers({
posts() {
return Posts.find();
}
});
Template.postItem.helpers({
postClass() {
return Session.equals('selectedPost', this._id)
? 'selected'
: '';
}
});
Template.postItem.events({
'click'() {
Session.set('selectedPost', this._id);
}
});
在此处使用 Session.equals 表示当用户单击某个项目并更改选择时,只会重新渲染新选中的项目和新取消选中的项目。
如果使用 Session.get 而不是 Session.equals,则当选择更改时,所有项目都会重新渲染。
对于对象和数组会话值,您不能使用 Session.equals
;相反,您需要使用 underscore
包并编写 _.isEqual(Session.get(key), value)
。