Typeahead和Ember.handelbars

m0c*_*m0c 5 handlebars.js ember.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}}')
         }
        }
      );
  }

});
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误:

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

 var helper = Ember.Handlebars.resolveHelper(options.data.view.container, property);
Run Code Online (Sandbox Code Playgroud)

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

如果我使用Handlebars.compile()而不是Ember.Handlebars.compile()它会工作.看来上下文不正确.

Ed4*_*Ed4 2

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

或者,您的模板非常简单,它可能只是一个文字函数,这样就可以省去在生产中运送 Handlebars 编译器或专门预编译此编译器的麻烦:

templates: {
  suggestion: function(context){ return context.firstName + ' ' + context.lastName; }
}
Run Code Online (Sandbox Code Playgroud)