Typeahead和Ember.handlebars

时间:2014-03-24 19:36:55

标签: ember.js handlebars.js typeahead.js

我正在尝试使用elasticsearch后端实现Typeahead。搜索本身似乎有效,现在我正在尝试调整光学元件。我想使用我写的Ember.Handlebars助手。我的第一次尝试是使用handelbars作为模板引擎:

App.SearchComponent = Ember.TextField.extend({

  didInsertElement: function() {
    App.UserSearchEngine.initialize();
    this.initializeTypeahead();
  },

  initializeTypeahead: function(){
      var _this = this;
      this.typeahead = this.$().typeahead({
          hint: true,
          highlight: true,
          minLength: 3
        },
        {
         name: _this.$().attr('id') || "typeahead",
         // template: 'My: {{firstName}}',
         limit: this.get("limit") || 5,
         source: App.UserSearchEngine.ttAdapter(),
         templates:{
            suggestion: Ember.Handlebars.compile('{{firstName}} {{lastName}}')
         }
        }
      );
  }

});

这给了我一个错误:

  

未捕获的TypeError:无法读取未定义的属性“容器”   由Ember在行中的“_triageMustache”助手中引起的

 var helper = Ember.Handlebars.resolveHelper(options.data.view.container, property);

这可能是因为我尝试直接编译模板。

如果我使用Handlebars.compile()而不是Ember.Handlebars.compile(),它会工作。上下文似乎不正确。

1 个答案:

答案 0 :(得分:2)

你实际上应该在这里使用常规Handlebars.compile。 Typeahead库对Ember绑定模板一无所知,因此它不知道如何调用它们。

或者,您的模板非常简单,它可以只是一个文字函数,以节省您在生产中运送Handlebars编译器的麻烦或特别预编译这个:

templates: {
  suggestion: function(context){ return context.firstName + ' ' + context.lastName; }
}