2014-03-24 8 views
5

Ich versuche, Typeahead mit einem Elasticsearch Backend zu implementieren. Die Suche selbst scheint zu funktionieren, jetzt versuche ich, die Optik zu optimieren. Ich möchte einen Ember.Handlebars Helfer verwenden, den ich schrieb. Mein erster Versuch wurde mit handel als Template-Engine:Typeahead und Ember.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}}') 
     } 
     } 
    ); 
    } 

}); 

Dies gibt mir eine Fehlermeldung:

Uncaught TypeError: Cannot read property 'container' of undefined caused by Ember in the "_triageMustache" helper in the line

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

Dies ist wahrscheinlich auf die Tatsache zurückzuführen ist, dass ich versuchen, eine Vorlage direkt zu kompilieren.

Wenn ich Handlebars.compile() anstelle von Ember.Handlebars.compile() verwenden würde, würde es funktionieren. Es scheint, dass der Kontext nicht korrekt ist.

+0

Alle Nachrichten auf diesem? –

Antwort

2

Sie sollten eigentlich regelmäßig Handlebars.compile hier verwenden. Die Typeahead-Bibliothek weiß nichts über Ember-gebundene Vorlagen, so dass sie nicht weiß, wie sie aufgerufen werden.

Alternativ ist die Vorlage so einfach es nur eine wörtliche Funktion sein könnte, sich für den Versand einen Lenker Compiler in der Produktion oder Vorkompilieren diese eine speziell die Mühe sparen:

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