MagicSuggest 数据函数中的 Promise
Promise in MagicSuggest data function
我试过直接在 github 上问这个问题,但这个项目似乎没有太多动静了。如果 SO 上有人有想法,那就太好了。是否可以 return 数据函数中的承诺?我尝试了以下方法,但似乎不起作用。问题是我试图在数据函数中进行 ajax 调用,它需要一个 result/data 数组。当然,在进行异步 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;
}});
如果有其他方法可以解决此问题,我将不胜感激。
提前致谢。
迈克尔
对于那些感兴趣的人,我已经设法找到了解决问题的方法。正如在 github (https://github.com/nicolasbize/magicsuggest/issues/281) 上发布的那样,您需要在初始化期间使用 keyup 事件而不是设置数据 属性。所以它现在看起来像这样:
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 调用,因此您可能希望通过添加某种延迟或其他方式来改善这一点。
我也这样做过:
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...
});
哪里我的搜索(查询)returns:
Observable<MyObject[]>
我试过直接在 github 上问这个问题,但这个项目似乎没有太多动静了。如果 SO 上有人有想法,那就太好了。是否可以 return 数据函数中的承诺?我尝试了以下方法,但似乎不起作用。问题是我试图在数据函数中进行 ajax 调用,它需要一个 result/data 数组。当然,在进行异步 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;
}});
如果有其他方法可以解决此问题,我将不胜感激。
提前致谢。
迈克尔
对于那些感兴趣的人,我已经设法找到了解决问题的方法。正如在 github (https://github.com/nicolasbize/magicsuggest/issues/281) 上发布的那样,您需要在初始化期间使用 keyup 事件而不是设置数据 属性。所以它现在看起来像这样:
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 调用,因此您可能希望通过添加某种延迟或其他方式来改善这一点。
我也这样做过:
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...
});
哪里我的搜索(查询)returns:
Observable<MyObject[]>