ここでJSFiddleを更新しました
これは正常な動作です。afterkeypress
Knockout は、やなどの認識しているイベントへの値バインディングを登録しますblur
。デフォルトでは、Google Places API などの他のフレームワークによって行われた変更を「検出」することはできません。したがって、機能させるには、他のフレームワークから Knockout にイベントをプッシュするコードを記述する必要があります。
この場合、Google Places Autocomplete API はplace_changed
イベントをサポートしています。このイベントを更新した Fiddle に組み込み、実際の例を紹介しました。このイベントの詳細については、Google のドキュメントを参照してください。最も重要なビットは次のとおりです。
google.maps.event.addListener(autocomplete, 'place_changed', function() {
var place = autocomplete.getPlace();
koObj.StartDescription(place.formatted_address);
koObj.Name(place.name);
koObj.Address(place.formatted_address);
});
ただし、この機能を複数回使用する場合は、この動作をカスタム Knockout バインディングでラップすることを強くお勧めします。
これは、カスタム Knockout バインディングに関する優れた記事です。最後の章までスクロールすると、サード パーティ コントロールをラップする Knockout バインディングの例が表示されます。Google プレイス オートコンプリートについても同じことを行う必要があるため、このコントロールの操作の 3 つの側面を処理できます。
- コントロールの初期化 (ウィジェットのオプションの構成オプションを使用)
- イベント ハンドラーを設定して、UI で行われた更新に応答する。
place_changed
これは、イベントをラップすることによって実現されます。
- ビュー モデルに加えられた更新への対応。これは、シナリオでは必要ない場合があります。
カスタム ノックアウト バインディングを使用すると、次のようになります。
<input id="startDescription" type="text" data-bind="googleAutoComplete: StartDescription, googleAutoCompleteOptions: { componentRestrictions: { country: 'uk' } }" />
幸運を!