2017-02-13 14 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; 
}}); 

これを解決する別の方法がある場合は、私はあなたの助けに非常に感謝します。

ありがとうございます。

マイケル

答えて

0

私は問題の解決策を見つけることができました。 github(https://github.com/nicolasbize/magicsuggest/issues/281)に掲載されているように、初期化中にdataプロパティを設定するのではなく、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呼び出しは、すべてのキーを押した後、解雇されることになります。だから、今、このようになります。

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[]> 
関連する問題