带有Typeahead的Meteor:在输入元素上调用typeahead()的位置?

时间:2014-01-20 20:06:17

标签: meteor bootstrap-typeahead iron-router

我正在使用Meteor与铁路由器,似乎无法使用typeahead(此版本:https://github.com/bassjobsen/Bootstrap-3-Typeahead)。

以下是一些代码:

HomeController = RouteController.extend({
  //....
  after: function () {
    var tags = this.getData().tags;
    console.log(tags);
    if(tags.length > 0) {
      var tags = ['hello', 'world'];
      console.log("Adding typeahead for tags to ", $('.input-search')[0]);
      console.log("tags: ", tags);
      $('.input-search').typeahead({
        source: tags,
        updater: function(item) {
          Router.go('/projects/tag/' + item);
        }
      });
    }
  },

我有一个标题是应用程序布局的一部分,并且输入如下:

<input type="text" class="form-control input-search" data-provide="typeahead" placeholder="Search">

after:函数中的jQuery正确获取输入。但是在输入上调用typeahead似乎没有正确激活typeahead:输入输入时没有任何反应。

但是如果我在setTimeout中包装typeahead调用,它确实有效。

当然,每当你开始在setTimeouts中包装东西时,事情就不对了。

使用Iron Router时,哪里/何时是初始化typeahead的正确位置?

3 个答案:

答案 0 :(得分:0)

您可以在模板的rendered功能中初始化预先输入。例如:

Template.mytemplate.rendered = function() {
      $('.input-search').typeahead({
        source: tags,
        updater: function(item) {
          Router.go('/projects/tag/' + item);
        }
      });
};

答案 1 :(得分:0)

我明白了。

您需要确保插件使用的任何输入都被Meteor“保留”,即不重新渲染。最简单的方法是确保输入具有ID属性。所以将我的搜索输入更改为固定它:

<input type="text" id="input-search" class="form-control" data-provide="typeahead" placeholder="Search">

相关文档:http://docs.meteor.com/#template_preserve

答案 2 :(得分:0)

截至Meteor 1.0.3.1和iron:router@1.0.7工作解决方案是安装sergeyt:typeahead和init typeahead,如下所示:

Template.MyTemplate.rendered = function () {
    Meteor.typeahead.inject();
}

初始模板只能执行一次初始化。