我们一直在我们的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中做同样的事情来匹配以前的行为?
答案 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
中保留了一个单独的把手依赖关系,因为看起来类型库需要您将香草把手模板传递给它