【问题标题】:How can I rerender a blaze template when an input value changes on a different template?当输入值在不同模板上发生更改时,如何重新渲染 blaze 模板?
【发布时间】:2017-07-18 09:38:41
【问题描述】:

我有一个名为“orientation”的模板,其中包含一系列滑块的参数,这些滑块的值取决于来自名为“selector”的不同模板的输入。

当我更改选择器模板上的输入值时,我希望方向模板使用新的滑块值重新呈现,这些值是使用新输入值计算的。

最好的方法是什么,我应该完全重新渲染模板还是有更有效的方法?

【问题讨论】:

  • 这两个模板是什么关系?父母/孩子?父模板的两个孩子?还是...?

标签: javascript templates meteor meteor-blaze


【解决方案1】:

您可以使用 Session 变量。你需要使用

Session.set('variablename', value) 

在选择器模板中设置变量,并且

Session.get('variablename')

在需要它的模板中检索它的值。流星反应应该做剩下的;-)

【讨论】:

    【解决方案2】:

    Mathieu 的会话建议效果很好 - Michel 还提到了反应变量。您可以使用ReactiveVar 包来获得与使用Session 大致相同的结果,只要您相应地定义、导出和导入变量(假设您使用的是Meteor 1.3 或更高版本)。

    例如在模板 A 中:

    //... set something to the Reactive Var in an event handler, e.g.
    
    import { ReactiveVar } from 'meteor/reactive-var';
    export let selector = new ReactiveVar();
    
    Template.templateA.events({
      'click .something':(event)=>{
        selector.set('somethingImportant');
      }
    })
    

    在模板 B 中:

    // ... making sure you import the reactive var
    
    import { selector } from '/path/to/templateA';
    
    Template.templateB.helpers({
      getSelector:()=>{
        return selector.get()
      }
    });
    

    有关ReactiveVar 的更多信息可以在 Meteor 的文档中阅读。文档中需要注意的一件事是:

    ReactiveVars 可以保存任何值,而 Session 变量是有限的 转 JSON 或 EJSON。

    根据您如何处理驱动滑块反应性的数据,这可能值得牢记。

    【讨论】:

      【解决方案3】:

      您需要实现 overservables,当值发生变化时,您可以使用它在响应模式下运行。

      【讨论】:

      • 虽然这是一种可能的解决方案,但远非最简单的解决方案。
      • 解决方案是什么?
      • Session 变量或反应变量。这是跨模板响应式通信状态的正常流星模式。
      猜你喜欢
      • 2017-03-13
      • 2020-07-07
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 2014-06-14
      相关资源
      最近更新 更多