我知道这是迟到的,但要完成杰弗里的回答:
实际上是recommended 使用作用域
ReactiveVar
或ReactiveDict
在处理表单数据等非全局变量时。
假设这个模板:
<template name="form">
<form>
<input id="firstName" type="text" value="">
<input id="lastName" type="text" value="">
<p>Hello, {{fullName}}</p>
</form>
</template>
如您所见,我没有直接在模板中设置输入值以避免onChange 事件的无限循环。
与ReactiveVar:
首先在项目根目录的终端中运行meteor add reactive-var,然后:
import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';
Template.form.onCreated(function() {
this.form = new ReactiveVar({
firstName : '',
lastName : ''
});
});
Template.form.helpers({
fullName : () => {
let form = Template.instance().form.get();
return `${form.firstName} ${form.lastName.toUpperCase()}`;
}
});
Template.form.events({
'keyup #firstName, change #firstName'( event ) {
let form = Template.instance().form;
form.set(Object.assign(form.get(), { firstName : event.currentTarget.value }));
},
'keyup #lastName, change #lastName'( event ) {
let form = Template.instance().form;
form.set(Object.assign(form.get(), { lastName : event.currentTarget.value }));
}
});
与ReactiveDict:
首先在项目根目录的终端中运行meteor add reactive-dict,然后:
import { Template } from 'meteor/templating';
import { ReactiveDict } from 'meteor/reactive-dict';
Template.form.onCreated(function() {
this.form = new ReactiveDict();
this.form.set('firstName','');
this.form.set('lastName','');
});
Template.form.helpers({
fullName : () => {
let form = Template.instance().form;
return `${form.get('firstName')} ${form.get('lastName').toUpperCase()}`;
}
});
Template.form.events({
'keyup #firstName, change #firstName'( event ) {
Template.instance().form.set('firstName', event.currentTarget.value);
},
'keyup #lastName, change #lastName'( event ) {
Template.instance().form.set('lastName', event.currentTarget.value);
}
});