2017-09-19 3 views
0

保存された「場所」の配列にアクセスする際に問題があります。 Locationsはオブジェクトリテラルで、クリックする現在の要素に基づいてタイトルプロパティBASEDにアクセスしようとしています。私は次のコードを持っていますが、正しくconsole.logに取得できません。私の推測では、私の「this」とclosure関数の使用法は強くないということです。うまくいけば、私は誰かが光を当てるためにこれを十分に説明しました。フィードバック+説明は非常に高く評価されています。knockout jsを使って現在の要素をどのように参照していますか?

(追記:私のプロジェクトの要件は、私はノックアウトJSフレームワークとMVVMの形式を使用する必要があると言う)

  1. HTML

  <ul data-bind="foreach:locationsArray, click:goToLocation"> 
 
      <li><span id="place" data-bind="text:title"></span></li> 
 
      </ul>

2)のJavascriptのViewModel

var ViewModel = function() { 

    var self = this; 

    self.locationsArray = ko.observableArray(locations); 

    //My goal here is to log the current title of the location selected from the 
    //model. This is the part that is not working.. 
    self.goToLocation = function(self) { 
    console.log(self.locations); 
    } 

3)Javascriptのデータモデル(JSON形式)

var locations = [ 
    { 
    title: 'Nino\'s Pizza', 
    location: { 
     lat: 40.620057, 
     lng: -74.032894 
    } 
    }, 
    { 
    title: 'Shore Road Bike Path', 
    location: { 
     lat: 40.623089, 
     lng: -74.040596 
    } 
    }, 
    { 
    title: 'Paneantico Bakery', 
    location: { 
     lat: 40.619418, 
     lng: -74.0322818 
    }] 

答えて

1

あなたはliないulにクリックイベントを添付する必要があります。ここで

<ul data-bind="foreach:locationsArray"> 
    <li><span id="place" data-bind="text:title, click:$parent.goToLocation"></span></li> 
</ul> 

$parentViewModelなくlocationオブジェクトにgoToLocationを探すためにノックアウトを教えてくれます。あなたのjsの中

その後は:

var ViewModel = function() { 
    var self = this; 
    self.locationsArray = ko.observableArray(locations); 

    // item will have the data of the clicked li 
    self.goToLocation = function(item) { 
    console.log(item); 
    } 
} 

ko.applyBindings(new ViewModel()); 

ここでは、adigaありがとうfiddle

+0

です!それはトリックをした.. –

関連する問題