带有typeahead.js的Symfony2:如何将%QUERY传递到路径参数



我想在我的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 }}