我试过直接在github上问这个问题但是这个项目似乎没有多少动静了。如果SO上有人有想法,那就太好了。是否可以在数据函数中返回一个promise?我试过以下它似乎没有用。问题是我试图在数据函数中进行ajax调用,该函数需要结果/数据数组。当然,在进行异步ajax调用时我不能这样做。
var ms = $('#mycombo').magicSuggest({minChars: 2, data : function(q) {
return someAPI.findSuggestions(q, currentLang).then(function(response) {
if(!_.isEmpty(response.data.suggestions)) {
_.each(response.data.suggestions, function(suggestion) {
if (suggestion.id && suggestion.label) {
data.push({ id: suggestion.id, name: suggestion.label });
}
});
}
});
return data;
}});
如果有另一种解决方法,我将非常感谢你的帮助。
提前致谢。
迈克尔
答案 0 :(得分:0)
对于那些感兴趣的人,我设法找到问题的解决方案。在github(https://github.com/nicolasbize/magicsuggest/issues/281)上发布时,您需要使用keyup事件,而不是在初始化期间设置data属性。所以它现在看起来像这样:
var ms = $('#mycombo').magicSuggest({minChars: 2});
$(ms).on('keyup', function(e, m, v) {
// ... get data via ajax and call "ms.setData(data)" in the response callback ...
// ... you can use m.getRawValue() to get the current word being typed ...
ms.setData(data);
}
这会导致每次按键后都会触发ajax调用,因此您可能希望通过添加某种延迟来改善这种情况。
答案 1 :(得分:0)
我也是这样做的:
const suggester: any = divElem.magicSuggest({
...more properties here...
data: (query) => {
if (query) {
this.myService.mySearch(query).take(1).subscribe((list) => {
suggester.setData(list);
});
}
return [];
},
...more properties here...
});
mySearch(查询)返回的位置:
Observable<MyObject[]>