我知道這是一個遲到之一,但完成傑弗裏的回答是:
它實際上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);
}
});
簡短的回答是肯定的,你至少需要一個模板事件處理程序。 input元素中的'value =「{{name}}」'不設置雙向數據流。 '{{name}}'僅在包含輸入元素的模板的(重新)生成時進行評估。 – Paul 2014-10-19 10:01:42