jQueryデータ処理をopenWeatherAPIのノックアウトバインディングに変更するにはどうすればよいですか?

レッセン

Knockoutデータバインディングを使用して、htmldiv要素の天気APIデータを更新したいと思います。現在、jQueryを使用してDOMを更新していますが、Knockoutを使用することを好みます。また、場所のzipを動的に変更して、天気がdiv内のその1つの場所に固有になるようにします。場所の配列があります。

これが私のコードです:html:

var zip = locations[0].zipcode;
var myOpenWeatherAPIKey = 'xxxxxxxxxxxxxxxxxxxx';
var openWeatherMapUrl = "http://api.openweathermap.org/data/2.5/weather?zip=" + zip + ",us&APPID=" + myOpenWeatherAPIKey + "&units=imperial";
console.log(zip);
//using JSON method for retrieving API data
$.getJSON(openWeatherMapUrl, function(data) {
    var parameters = $(".weather-data ul");
    var iconCode = data.weather[0].icon;
    var iconDescription = data.weather[0].main;
    var iconUrl = "http://openweathermap.org/img/w/" + iconCode + ".png";
    detail = data.main;
    windspd = data.wind;
    parameters.append('<li>Temp: ' + Math.round(detail.temp) + '° F <br></li>');
    parameters.append('<li><img style="width: 25px" src="' + iconUrl + '">  ' + iconDescription + '</li>');
}).fail(weatherError = function(e) {
    $(".weather-data").append("OpenWeatherAPI is unable to load!");
});
<div id="open-weather" class="open-weather">
    <div id="weather-data" class="weather-data">
        <p>  <br> Current Weather</p>
        <ul id="weather-items" class="weather-items">
        </ul>
    </div>
</div>

ありがとう、

ジョーウィルソン

カスタムKOバインディングまたはカスタムKOコンポーネント記述して、マークアップ、APIキー、jQuery、およびXHR呼び出しをカプセル化できます。

コードとユースケースを使用すると、コンポーネントは適切に聞こえます。次に、消費するマークアップは次のようになります。

<weather params="zip: myZipCode"></weather>

消費ページのビューモデルのどこにmyZipCodeありko.observableますか。

アップデート1

KOコンポーネント内にカプセル化するためのラフコードを追加しました。

アップデート2

jquery DOM参照をKOコンポーネントコードから移動し、コンポーネントテンプレートがKOバインディングを使用するようにしました。完全な例を示すために、消費ページビューモデルを追加しました。

function openWeatherComponentViewModel(params) {
  var self = this;
  
  self.zip = ko.observable(ko.unwrap(params.zip));
  self.temperature = ko.observable();
  self.iconCode = ko.observable();
  self.iconUrl = ko.pureComputed(function() {
    return "http://openweathermap.org/img/w/" + self.iconCode() + ".png";
  });
  self.iconDescription = ko.observable();
  self.hasWeather = ko.observable(false);
  self.errorMessage = ko.observable();
  
  var apiKey = 'xxxxxxxxxxxxxxxxxxxx';
  var url = "https://api.openweathermap.org/data/2.5/weather?zip=" + self.zip() + ",us&APPID=" + apiKey + "&units=imperial";  
  $.getJSON(url, function(data) {
    self.temperature(Math.round(data.main.temp));
    self.iconCode(data.weather[0].icon);
    self.iconDescription(data.weather[0].main);
    self.hasWeather(true);
  }).fail(function(error) {
    self.hasWeather(false);
    self.errorMessage("OpenWeatherAPI is unable to load! " + error.responseJSON.message);
  });
}

ko.components.register('weather-component', {
  viewModel: openWeatherComponentViewModel,
  template: `<div id="open-weather" class="open-weather">
                <div id="weather-data" class="weather-data" data-bind="if: hasWeather()">
                    <p>Current Weather for Zip Code <span data-bind="text: zip"></span></p>
                    <ul id="weather-items" class="weather-items">
                      <li>Temp: <span data-bind="text: temperature"></span>° F</li>
                      <li><img style="width: 25px" data-bind="attr: { src: iconUrl }"><span data-bind="text: iconDescription"></span></img></li>
                    </ul>
                </div>
                <div id="weather-data" class="weather-data" data-bind="if: !hasWeather()">
                    <span data-bind="text: errorMessage"></span>
                <div>
            </div>`
});

function myConsumingPageViewModel() {
  var self = this;
  self.myZipCode = ko.observable("80130");
}

var vm = new myConsumingPageViewModel();

ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<weather-component params="zip: myZipCode"></weather-component>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

表示する前にノックアウトバインディングからパラメータを変更するにはどうすればよいですか?

分類Dev

ノックアウトjsバインディングの初期評価を停止するにはどうすればよいですか?

分類Dev

ノックアウトバインディングを<html>要素に適用するにはどうすればよいですか?

分類Dev

数値をフォーマットするテキストボックスのノックアウトカスタムバインディングを作成するにはどうすればよいですか?

分類Dev

ノックアウトバインディングによってアコーディオンが破壊された場合、アコーディオンを再適用するにはどうすればよいですか?

分類Dev

自動一意のアトミックカウンターバインディングポイントを取得するにはどうすればよいですか(ハードコードされたバインディングなし=)?

分類Dev

GNOMEでアクティブなウィンドウのタイトルバーの色を変更するにはどうすればよいですか?

分類Dev

D3.jsのボタンクリックでデータフィルタリングを処理するにはどうすればよいですか?

分類Dev

Elasticsearchクラスター内の既存のノードのノードタイプ(データ、マスター、またはクライアント)をダウンタイムなしで変更するにはどうすればよいですか?

分類Dev

カスタムUserControlがDataTrigger内のテンプレートセッター内にあるときに双方向バインディングを処理するようにするにはどうすればよいですか?

分類Dev

進行状況ダイアログとバックグラウンドスレッドがアクティブなときに画面の向きの変更を処理するにはどうすればよいですか?

分類Dev

Python 3でバイトオブジェクトのエンコーディングを変更するにはどうすればよいですか?

分類Dev

タッチスクリーンの機能を相対ポインティングデバイスから絶対ポインティングデバイスに変更するにはどうすればよいですか?

分類Dev

バックグラウンドスレッドがデータベースへのデータを処理しているときにDB.closeを処理するにはどうすればよいですか?

分類Dev

Eclipseのレイアウト(XML)エディターのフォントを変更するにはどうすればよいですか?

分類Dev

Rails 4.2開発サーバーのデフォルトのバインディングIPを変更するにはどうすればよいですか?

分類Dev

トレーニングデータセットを変更して、分類アルゴリズムのマイノリティクラスの精度を高めるにはどうすればよいですか?

分類Dev

iOSデバイスがロックされているときまたは別のアプリケーションで再生されているバックグラウンドオーディオを処理するにはどうすればよいですか?

分類Dev

グリッドビューにバインドする前にデータセット値を変更するにはどうすればよいですか?

分類Dev

ggplot2構文が適切な場合、R CMDチェックの「グローバル変数の表示可能なバインディングがない」というメモを処理するにはどうすればよいですか?

分類Dev

Androidデータバインディングでオブジェクトのメソッドを使用するにはどうすればよいですか?

分類Dev

ノックアウトバインディングを使用してカスタムスクロールバー(jScrollPane)を作成するにはどうすればよいですか?

分類Dev

ノックアウトカスタムバインディングで文字列ベース/名前付きテンプレートを設定するにはどうすればよいですか?

分類Dev

同じレイアウトのEditTextの変更にデータバインディング式を反応させるにはどうすればよいですか?

分類Dev

デスクトップウォールでバインディングを有効にするにはどうすればよいですか?

分類Dev

パンダのデータフレームをバイナリマトリックスに変更するにはどうすればよいですか?

分類Dev

Unityのダッシュを実行するWindowsキーのバインディングを変更するにはどうすればよいですか?

分類Dev

Unityのダッシュを実行するWindowsキーのバインディングを変更するにはどうすればよいですか?

分類Dev

MACまたはWindowsでGitHubクライアントの外部エディターを変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    表示する前にノックアウトバインディングからパラメータを変更するにはどうすればよいですか?

  2. 2

    ノックアウトjsバインディングの初期評価を停止するにはどうすればよいですか?

  3. 3

    ノックアウトバインディングを<html>要素に適用するにはどうすればよいですか?

  4. 4

    数値をフォーマットするテキストボックスのノックアウトカスタムバインディングを作成するにはどうすればよいですか?

  5. 5

    ノックアウトバインディングによってアコーディオンが破壊された場合、アコーディオンを再適用するにはどうすればよいですか?

  6. 6

    自動一意のアトミックカウンターバインディングポイントを取得するにはどうすればよいですか(ハードコードされたバインディングなし=)?

  7. 7

    GNOMEでアクティブなウィンドウのタイトルバーの色を変更するにはどうすればよいですか?

  8. 8

    D3.jsのボタンクリックでデータフィルタリングを処理するにはどうすればよいですか?

  9. 9

    Elasticsearchクラスター内の既存のノードのノードタイプ(データ、マスター、またはクライアント)をダウンタイムなしで変更するにはどうすればよいですか?

  10. 10

    カスタムUserControlがDataTrigger内のテンプレートセッター内にあるときに双方向バインディングを処理するようにするにはどうすればよいですか?

  11. 11

    進行状況ダイアログとバックグラウンドスレッドがアクティブなときに画面の向きの変更を処理するにはどうすればよいですか?

  12. 12

    Python 3でバイトオブジェクトのエンコーディングを変更するにはどうすればよいですか?

  13. 13

    タッチスクリーンの機能を相対ポインティングデバイスから絶対ポインティングデバイスに変更するにはどうすればよいですか?

  14. 14

    バックグラウンドスレッドがデータベースへのデータを処理しているときにDB.closeを処理するにはどうすればよいですか?

  15. 15

    Eclipseのレイアウト(XML)エディターのフォントを変更するにはどうすればよいですか?

  16. 16

    Rails 4.2開発サーバーのデフォルトのバインディングIPを変更するにはどうすればよいですか?

  17. 17

    トレーニングデータセットを変更して、分類アルゴリズムのマイノリティクラスの精度を高めるにはどうすればよいですか?

  18. 18

    iOSデバイスがロックされているときまたは別のアプリケーションで再生されているバックグラウンドオーディオを処理するにはどうすればよいですか?

  19. 19

    グリッドビューにバインドする前にデータセット値を変更するにはどうすればよいですか?

  20. 20

    ggplot2構文が適切な場合、R CMDチェックの「グローバル変数の表示可能なバインディングがない」というメモを処理するにはどうすればよいですか?

  21. 21

    Androidデータバインディングでオブジェクトのメソッドを使用するにはどうすればよいですか?

  22. 22

    ノックアウトバインディングを使用してカスタムスクロールバー(jScrollPane)を作成するにはどうすればよいですか?

  23. 23

    ノックアウトカスタムバインディングで文字列ベース/名前付きテンプレートを設定するにはどうすればよいですか?

  24. 24

    同じレイアウトのEditTextの変更にデータバインディング式を反応させるにはどうすればよいですか?

  25. 25

    デスクトップウォールでバインディングを有効にするにはどうすればよいですか?

  26. 26

    パンダのデータフレームをバイナリマトリックスに変更するにはどうすればよいですか?

  27. 27

    Unityのダッシュを実行するWindowsキーのバインディングを変更するにはどうすればよいですか?

  28. 28

    Unityのダッシュを実行するWindowsキーのバインディングを変更するにはどうすればよいですか?

  29. 29

    MACまたはWindowsでGitHubクライアントの外部エディターを変更するにはどうすればよいですか?

ホットタグ

アーカイブ