1

OK、ここに何かが欠けていて、ロジックが正しいように見えるので見つけられないようですが、エラーが表示されていないことは確かです。

var VisibleMarkers = function() {
var filtered = _.reject(Gmaps.map.markers, function(marker) {
  return marker.grade != $('.mapDataGrade').val() && !_.contains(marker.subjects,$('.mapDataSubjects').val())
  });
return filtered
}

javascript の作業を簡素化するために、underscore.js と jQuery を使用しています。

だから今、私は拒否されるデータを選択してチェックしてから、フィルタリングされたマーカーを(Google)マップに表示します(それがまったく役立つ場合、これは完全に正常に機能しているgmaps4railsを使用しています、これは頭の最後の髪の毛を失う原因となっているJavaScriptのビット)。

現在、コードは「.mapDataGrade」選択に対して 100% 正しく機能しますが、「.mapDataSubjects」はそうではありません。これで、markers オブジェクトには科目の json 配列があり (これは学生用です)、配列内の各項目には ID があります。私がチェックすることになっているのはこのIDです。

誰かが私が間違っていることを見ることができますか?

含める必要がある情報がさらにある場合は、お知らせください。

これは、gmaps4rails を使用した RoR アプリケーションのプレーンな JavaScript です。

4

1 に答える 1

0

これで、markers オブジェクトには科目の json 配列があり (これは学生用です)、配列内の各項目には ID があります。私がチェックすることになっているのはこのIDです。

_.contains値を比較しますが、イテレータで値をオブジェクトの「id」プロパティと比較したいようです。そのためには、_.someうまくいくでしょう。に似containsていますが、値を比較する代わりに、比較を関数として記述できる点が異なります。

リスト内のいずれかの値が反復子の真偽テストに合格した場合、true を返します。

使用方法は次のとおりです。

!_.some(marker.subjects, function(subject) {
    return subject.id == $('.mapDataSubjects').val();
})

私が正しければ、行全体は次のようになります。

return marker.grade != $('.mapDataGrade').val() && 

    // check that none of the subjects is a match
    !_.some(marker.subjects, function(subject) {

        // the current subject is a match if its ID matches the selected value
        return subject.id == $('.mapDataSubjects').val();
    });
于 2012-12-18T19:58:53.930 に答える