0

所以我试图在我的 Meteor 应用程序中实现一个非常简单的搜索功能。这是一个非常简单的医学词典应用程序,所以我只有一个集合,其中包含所有术语及其各自的定义、发音等。我的目标是让用户使用表单输入输入他们的搜索查询,并显示相关搜索结果(在点击提交之后,在 keyup 或 keydown 事件之后,现在并不重要;这只是一个原型)。这是我到目前为止所拥有的。

搜索栏 (称为模板的一部分header.html

<form class="navbar-form navbar-left" role="search">
  <div class="form-group">
    <input type="text" id="search" name="search" class="form-control" placeholder="Search">
  </div>
  <button type="submit" class="btn btn-default">Submit</button>
</form>

事件处理程序 (称为header.js

Template.header.events({
'submit form': function(e) {
    e.preventDefault();
    var query = $(e.target).find('[name=search]').val();

    // Log the query for testing
    console.log(query);

    //Log the object that is returned for testing
    console.log(Dictionary.find({english: query}).fetch());

    var result = Dictionary.find({english: query}).fetch();

  }
});

结果列表 (这是不起作用的部分,在名为 的模板中itemsList.html

<template name="itemsList">
  <div class="items">
    {{#each dictionary}}
      <ul>
        <!-- itemPage just refers to the page individual items -->
        <li><a href="{{pathFor 'itemPage'}}">{{english}}</a></li>
      </ul>
    {{/each}}
  </div>
</template>

在这种情况下{{english}}是指我要搜索的集合中的一条数据(集合中的英文单词Dictionary)。

所以,既然我已经解决了所有这些问题,我的问题是:我从这里做什么?在header.js中,结果console.log(Dictionary.find({english: query}).fetch());是/是我正在寻找的对象,所以基本上,我必须做什么才能将该对象/那些对象发送到我的itemsList.html模板,以便我可以用光标对其进行迭代?

我想我在这方面工作太久了,因为我确信解决方案非常简单。感谢您提供任何帮助,如果我的方法都错了(我看到很多人在搜索东西时使用会话),请让我知道我应该做得更好。另外,我正在使用 Iron-router 并关闭了自动发布功能,因此如果需要对其中任何一项进行更改,请也告诉我。谢谢!

4

1 回答 1

0

只需将搜索字符串保存在会话中并使用会话作为参数进行订阅(如果存在),这样您就可以动态订阅填充模板所需的数据

于 2014-07-10T01:18:19.527 回答