2016-05-29 4 views
0

私は、View Model of KnockoutからFoursquare APIを呼び出しています。 エラーは表示されませんが、ネットワークタブには、呼び出されるAPIの兆候はありません。Knockout.js View ModelからAPIを呼び出す

ビューモデルでAPIを呼び出すための特定のコードを追加する必要はありますか?

var ViewModel = function(){ 
console.log("View Model started") 

var self = this; 
// Foursquare API Call : 

self.venueList = ko.observableArray([ 

    ]); 

this.foursquareURL = 'https://api.foursquare.com/v2/venues/search?ll=37.8,-122.4&query=croissant&client_id=CLIENT_ID&client_secret=CLIENT_SECRET'; 


this.fs_ApiCall = function() 
{ 
    console.log("API called"); 

$.getJSON(foursquareURL, function(data){ 

    //Add a header 
$foursquareElem.text('Croissants'); 


var venues = data.response.venues; 
self.venueList = ko.observableArray([]); 

    for (var i=0; i<venues.length; i++){ 

      console.log(venues[i].name); 
    self.venueList.push ({ 

      name: venues[i].name, 
      lat: venues[i].location.lat, 
      lng: venues[i].location.lng 



    }); 

console.log(self.venueList()[i].name) 
    } 

    }).error(function() { 
$foursquareElem.text("No data available"); 
}); 
}; 

}; 




ko.applyBindings(new ViewModel()); 

HTML:

<div id="foursquare-venues"> 

<ul data-bind= "foreach:venueList"> 
<li id="li-name" data-bind = "text: $data.name"> 

</li> 
+0

'getJSON'呼び出しの' foursquareURL'は外部変数ですか?それ以外の場合は、 'this.foursquareURL'を取得したいかもしれません。 – litel

+0

必要なすべてのパラメタ(ID、検索クエリ)がそのURLにあります。私はそれをView Modelで定義し、それを使用します。私はノックアウトではなかったテストコードを最初に書いただけで、リストビューに結果を追加していました。 –

+0

私は$ .getJSON(self.foursquareURL、function(data))への呼び出しを変更しました。これで、console.logに、APIからデータが受信されたことがわかりました。ビュー内のデータバインディングに問題があります –

答えて

0

必ず宣言してくださいコメントで述べたように、観察/一度observableArrayし、それを再利用。 getJSONのように宣言が重複しないようにしてください。

関連する問題