2017-02-13 48 views
0

我試過直接在github上提問這個問題,但似乎沒有太多的動作在這個項目了。如果SO上的某個人有想法,那將會很棒。是否有可能在數據函數中返回一個承諾?我已經嘗試了以下,它似乎並沒有工作。問題是我試圖在數據函數內進行ajax調用,該函數需要結果/數據數組。當然,我在做異步ajax調用時無法做到這一點。MagicSuggest數據功能的承諾

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; 
}}); 

如果有其他解決方法,我會非常感謝您的幫助。

在此先感謝。

Michael

回答

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調用每按一次鍵被解僱,所以你可能希望通過添加某種延遲或東西來改善這一點。

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[]>