【问题标题】:Meteor How to call helper of a template into another template helper?Meteor 如何将一个模板的助手调用到另一个模板助手中?
【发布时间】:2018-12-05 21:43:45
【问题描述】:

我有一个搜索工作正常的搜索模板。现在我需要在我的 navbar.js 文件中调用相同的搜索事件。是否可以在我的导航栏模板助手中调用其他模板的助手。

templates\pages\search\search.js 助手

Template.Search.events({

  "keyup #searchFormInput": _.throttle((e, tmpl) => {
    let text = $(e.target).val().trim();
    console.log(text);
    if (text.length)
      ArgSearch.search(text);
  }, 200)

});

Template.Search.helpers({
  'getResults' () {
    return ArgSearch.getData({});
  }
});

模板\共享\导航\navbar.js

试着像这样称呼它

Template.Topnavright.events({

    Template.Topnavright.__helpers.get('Search')();

}); 

【问题讨论】:

    标签: meteor


    【解决方案1】:

    一个可能的解决方案是创建一个共享上下文,由两个模板更新和使用:

    imports/somewhere/context.js

    export const Shared = {
      ArgSearch: ArgSearch,
    }
    

    模板\页面\搜索\search.js

    import {Shared} from 'imports/somewhere/context.js'
    
    Template.Search.events({
    
      "keyup #searchFormInput": _.throttle((e, tmpl) => {
        let text = $(e.target).val().trim();
        console.log(text);
        if (text.length)
          Shared.ArgSearch.search(text);
      }, 200)
    
    });
    
    Template.Search.helpers({
      'getResults' () {
        return Shared.ArgSearch.getData({});
      }
    });
    

    模板\shared\nav\navbar.js

    import {Shared} from 'imports/somewhere/context.js'
    
    Template.Topnavright.events({
      someHelpers () {
        return Shared.ArgSearch.getData({});
      }
    }); 
    

    请注意,您还可以使用共享上下文共享 ReactiveVarReactiveDict 实例,这有点像 Session,但范围有限。

    【讨论】:

    • 但是我在顶栏中有单一的搜索输入类型,在它的按键上我想调用搜索模板。这样当用户在 serch 输入类型中键入任何关键字时,所有记录都会出现。此顶部栏将出现在所有页面上。
    • 您不会“调用”搜索模板,而是更改搜索模板“侦听”的数据源。这是模型-视图-控制器设计中的标准方法,应该适用于您的设置。
    • 有例子或参考吗?
    • 这是解决您描述的问题的一种可能方法,因此您不会在文档中找到它。该方法假定您的ArgSearch 在某种程度上是全局的,但仍仅限于某些组件。因此,通过模块导出将其作为Singleton 共享并保持您的代码可维护是有意义的。这个答案解决了你的问题吗?
    猜你喜欢
    • 2019-04-07
    • 2014-12-12
    • 2015-03-28
    • 2014-11-28
    • 1970-01-01
    • 2015-01-06
    • 2016-05-26
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多