Meteor JS的实时反应形式
Real time reactive form with Meteor JS
我已经开始学习流星了,有一些最初的概念我还没有掌握。
在Ember/Handlebars中,我可以写这样的
<script type="text/x-handlebars">
{{input type="text" value=name}}
Hello, {{name}}
</script>
每当用户在输入框中键入内容时,它都会实时显示。
如何在流星中实现同样的效果?我试过这个
<div>
<input type="text" value="{{name}}">
Hello, {{name}}
</div>
但它不起作用。我需要明确地写一个流星事件吗?
要详细说明Paul的回答,是的,您需要定义一个事件。模板还需要知道从哪里获取name
的值。下面是一个更加充实的例子:
<template name="hello">
<div>
<input type="text" value="{{name}}">
Hello, {{name}}
</div>
</template>
和:
if (Meteor.isClient) {
Session.setDefault("name", "world");
Template.hello.helpers({
name: function () {
return Session.get("name");
}
});
Template.hello.events({
'keyup input': function (event) {
Session.set("name", event.target.value);
}
});
}
现场示例:http://meteorpad.com/pad/TsHu27WASi6KdqaA6
我知道这很晚了,但要完成Geoffrey的答案:
实际上,建议使用scopedReactiveVar或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);
}
});
相关文章:
- 使用Node js和D3实时绘制地图上的国家名称
- WebRTC实时视频流node.js
- 实时 Angular js ng-hide 不起作用
- 时刻.js + 实时戳时间前基于 UTC 来自服务器的日期时间
- 使 Angular JS 实时 ajax 请求消耗更少
- 使用JS和Keyup在Rails4中进行实时搜索
- 使用php-js-msyql的实时更新消息系统
- Node js redis socket.io pubsub实时更新
- 使用推送器和画布 js 的实时图表
- 在node.js中实时观看外部内容
- 使用 Node.js 实时读取文件
- 如何让 docpad 咕噜的骨架最小供应商 js 文件与实时重新加载
- Node.js实时:WebSocket + 服务器端轮询与客户端轮询
- 实时Magento网站上的原型JS问题
- 如何使时间在瞬间js实时
- 客户端未使用 Socket.io 和 Node.js 实时更新
- 网站/应用程序 - 实时图表建议(mySQL,JS,PHP?)
- SQL Server 实时推送通知到 Node.JS
- 实时JS/Jquery,Html,CSS编辑器
- 如何在传单实时 js API 中使用推送模型