2017-12-22 12 views
1

私は約2ヶ月間ノックアウトを学んでいます。私は、テキスト入力によってフィルタリングされるリストを作成しようとしています。このフィルタは同時に地図上にマーカーを隠す/表示します。私は問題がノックアウト側かhtmlバインディング側にあるかどうかは分かりません。あなたは私を正しい方向に向けることができますか?これが問題とコードのサンプルコードです:knockoutjsを使ってテキストボックスで "keydown"の後にフィルタリングされたリストを表示する

self.filteredPlaces = ko.computed(function() { 
     var filter = self.query().toLowerCase(); 
     if (!filter) { 
     ko.utils.arrayForEach(self.markers(), function (item) { 
      item.setVisible(true); 
      //I used the console.log to verify that the info was being fetch 
      console.log(item.city); 
     }); 
     return self.markers(); 
     } else { 
     return ko.utils.arrayFilter(self.markers(), function(item) { 
      // set all markers visible (false) 
      var result = (item.city().toLowerCase().search(filter) >= 0); 
      item.setVisible(result); 
      return result; 
     }); 
     } 
    }); 

はまた、私はあなたのビューにノックアウトオブジェクトをバインドするinitMapko.applyBindings(viewModel)を呼び出す必要がフィドルセットアップhere

+0

あなたはビューにノックアウトオブジェクトをバインドしていません。これを行うには、あなたのinitMap関数で "ko.applybindings(viewmodel)"を使う必要があります。これは都市バインディングが現れるようにします。次に、あなたのquery()でsubscribeを呼び出す必要があります。 –

+0

どうすればいいですか? –

+0

よろしくお願いします。最初に私がinitMapとko.applyBindingsに関してあなたのリストを表示するように提案したことをやってみましょう。あなたは今リストを見ますか? –

答えて

0

へのリンクを持っています。 ko.applyBindings(myViewModel);

たときに、クエリの変更あなたが行動を取ることができるようにまた、あなたはあなたのクエリに観察可能にsubscribeする必要があります:<script>ブロックに次の行を追加し、ノックアウトを有効にするには

the documentationから。高度なユーザーの場合

、あなたが観測への変更の通知を受けること に独自のサブスクリプションを登録したい場合、あなたはそれらを呼び出す 機能を購読することができます。例:

myViewModel.personName.subscribe(function(newValue) { 
    alert("The person's new name is " + newValue); 
}); 
+0

理由はわかりませんが、購読する必要はありませんでした –

関連する問題