首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在文字变更上重新渲染火焰模版

在文字变更上重新渲染火焰模版
EN

Stack Overflow用户
提问于 2016-10-31 04:17:27
回答 2查看 1K关注 0票数 1

我有一个基于自动格式的流星火焰模板。

代码语言:javascript
复制
<template name="patientForm">

<div class='mdl-cell mdl-cell--12-col'>
    {{#autoForm id="insertUpdatePatientForm" collection="Patients" doc=selectedPatientDoc
    type=formType validation="browser" template="semanticUI"}}
    <div class='two fields'>
    {{> afQuickField name="firstName"}}
    {{> afQuickField name="lastName"}}
    </div>
    <div class='two fields'>
   {{> afQuickField name="phn.type"}}
   {{> afQuickField name="phn.value" class="ramq"}}
   </div>
       <div class='two fields'>
        {{> afQuickField name="birthDate"}}
        {{> afQuickField name="gender"}}
       </div>

    <button class="ui submit button" type="submit">Save</button>
    <div class="ui error message"></div>
    {{/autoForm}}
</div>
</template>

我想用名称phn.value来处理输入的文本更改事件。基于文本,我想自动填充另外两个字段:性别和出生日期。我这样做是通过直接更改模板数据,如下所示:

代码语言:javascript
复制
Template.patientForm.events({
    'change .ramq': function changeRAMQ(event, templateInstance) {
        const { patient } = templateInstance.data;
        if (patient.phn.type === 'RAMQ') {
            const ramq = event.target.value;
            const yy = parseInt(ramq.substr(4, 2), 10);
            let mm = parseInt(ramq.substr(6, 2), 10);
            const dd = parseInt(ramq.substr(8, 2), 10);
            patient.gender = mm < 13 ? 'Male' : 'Female';
            if (mm > 50) {
                mm -= 50;
            }
            patient.birthDate = moment(new Date(yy, mm, dd)).format('YYYY-MM-DD');
        }
    },
});

我得到的模板数据,并直接修改性别和生日时,phn.value的变化。但是,修改后的性别和生日不会在autoform / blaze模板中重新呈现。有什么方法可以迫使火焰模板的重新渲染,或者用其他方式改变火焰模板中的其他控制措施?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-01 09:58:09

要启用反应性,从而重新呈现字段,您应该使用ReactiveVar (或ReactiveDict)。

你可以这样做:

代码语言:javascript
复制
Template.patientForm.onCreated(function(){
  const instance = this;
  instance.birthDate = new ReactiveVar()
});

在帮助程序和事件中,可以使用instance.birthDate.set() / get()

代码语言:javascript
复制
Template.patientForm.helpers({
   birthDate() {
      return Template.instance().birthDate.get()
   }
});

Template.patientForm.events({
   'click something'(event, instance){
   ....
     instance.birthDate.set(value);
   ....
   }
});
票数 1
EN

Stack Overflow用户

发布于 2016-10-31 04:48:16

您不能直接修改模板数据(可以,但这不是反应性的,将被覆盖)。您从哪里获得模板数据?一个收藏品?一个反应变量?如果是这样,修改那里的数据

据说像这样的东西会起作用的:

代码语言:javascript
复制
Patients.update(templateInstance.data._id, {$set: {
  birthDate: ..,
  gender: .. 
}});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40336516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档