我想在我的symfony2项目中使用typeahead.js。因此,我有以下javascript:
$(document).ready(function(){
var players = new Bloodhound({
datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value); },
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: "{{ path('_api_player_search', {searchterm: '%QUERY', limit: 5}) }}",
prefetch: ''
});
players.initialize();
$('#searchfield').typeahead(null, {
displayKey: 'firstname',
source: players.ttAdapter(),
templates: {
suggestion: Handlebars.compile(
'{% verbatim %}<p><strong>{{firstname}}</strong> – {{lastname}}</p>{% endverbatim %}'
)
}
});
});
正如您所看到的,我想将由分支path
助手创建的url传递给Bloodhound()
配置的remote:
属性。(稍后我想使用FOSJsRoutingBundle来达到这个目的)。
现在的问题是,Bloodhound()
不会替换我的trick表达式中的%QUERY
占位符。有什么办法做到这一点吗?
非常感谢您的帮助!:)
好的,我找到了一个解决方案:
根据@Peter Bailey对这个问题的回答,我创建了一个自定义的小树枝扩展,可以像{{ path() |url_decode }}
一样向我的{{ path() }}
标签添加url_decode过滤器。
这将阻止%QUERY
转换为%25QUERY
,然后它可以在呈现的url中被javascript替换。
此外,我还添加了一个|raw
过滤器,以避免对"与"进行编码。所以最后我的标签看起来像这样:{{ path() |url_decode|raw }}