使用Ember的HTMLBars输入Typeahead.js

时间:2015-05-11 20:44:53

标签: javascript ember.js typeahead.js htmlbars

我们一直在我们的Ember应用程序中使用Typeahead.js库(通过this addon),在1.10之前的Ember版本上成功使用,但升级到Ember 1.10会导致我们出现问题。

到目前为止,我们已经成功编译了传递到typeahead组件的模板,并将其传递给了这样的类型:

templates: {
  // this.get('suggestionTemplate') is a string of handlebars template
  suggestion: Handlebars.compile(this.get('suggestionTemplate')),
  <other code>
}

这在Ember 1.10中不起作用,但是,因为typeahead.js在执行这行代码时会抛出以下错误:

代码:

$el = $(html.suggestion).append(that.templates.suggestion(suggestion)).data(datasetKey, that.name).data(valueKey, that.displayFn(suggestion)).data(datumKey, suggestion);

错误:

Uncaught TypeError: that.templates.suggestion is not a function

以前that.templates.suggestion,这是上面第一个代码块的值,是一个可以传递对象suggestion的函数,它将编译实际的模板。使用HTMLBars,that.templates.suggestion不再是一个函数,而是一个HTMLBars对象,因此该代码不再有效。

有没有更好的方法在Ember 1.10中做同样的事情来匹配以前的行为?

3 个答案:

答案 0 :(得分:1)

我记得我在使用Handlebars.compile时遇到了类似问题我最终选择将函数传递给suggestion,然后是模板内容:

templates: {
  empty: '<span>No results</span>',
  suggestion: function(item){
   return '<div>' + item.name + '</div>';
  }
}

希望这也适合你。

答案 1 :(得分:0)

如果不再保留这样的附加组件,我建议你直接使用typeahead(没有cli附加组件),自从Ember 1.7以来我一直在使用它,现在我在1.11

答案 2 :(得分:0)

最后,我们在bower.json中保留了一个单独的把手依赖关系,因为看起来类型库需要您将香草把手模板传递给它