0

マーカーのオブジェクトがあります。キーは連絡先の名前です。また、連絡先の名前でもある「連絡先」アイテムを持つオブジェクトの配列。

連絡先にオブジェクトの配列から既存の「ジオフェンス」があるかどうかを検出し、「フェンスを表示」ボタンを表示し、ない場合は「フェンスなし」ボタンを表示しようとしています。

フェンスは、と呼ばれるオブジェクトの配列に格納されますfencesCookie

これまでのコード:

function fenceButton(id) {
    for (var key in markers) {
        if (markers[key].id === id) {
            $.each(fencesCookie, function (i, f) {
                if (key === f.contact) {
                    menu.add(strings[strLang].viewfence, 'fence',
                    function(){
                        viewFence(f.lat, f.lng, f.radius);
                        menu.close();
                    });
                } else {
                    console.log("No Fence : "+key+" "+f.contact)
                }
            });
            if ($.isEmptyObject(fencesCookie)) {
                menu.add('No Fence', 'nofence',
                function(){
                    menu.close();
                });             
            }
        }
    }   
}

console.logは一致しないすべてのアイテムを吐き出しているため、ここに「フェンスなし」ボタンコードを追加すると、「表示」または「フェンスなし」ボタンだけでなく、複数のボタンが表示されます。

私はこれを間違った方法で行っていますか?

4

1 に答える 1

1

ヴィンス、「fencesCookie」に何が入っているか、「マーカー」オブジェクトに何が入っているかを見ずに言うのは難しいですが、次のいずれかです。

  1. [可能性が低い]'markers'オブジェクトに複数の一致するIDがあり、'(markers [key] .id === id)'が毎回肯定的な結果を出し、Cookieループに再びジャンプする原因になっています。

  2. [最も可能性が高い]「fencesCookie」の一致するキーのテストは、一致する場合を除いてすべての場合に失敗するため、「fenceCookie」の各キーまたは1つを除くすべてのキーに対して「NoFence」ボタンを出力します。

順序を変更し、ループの終了後に一致を確認する変数を追加しました。これを試してみてください(またはそのようなもの):

function fenceButton(id) {
    for (var key in markers) {
        if (markers[key].id === id) {
            // set a variable to test if we find a match
            // we'll set it to true if we find one
            var match = false;
            // Test that fencesCookie exists
            if ($.isEmptyObject(fencesCookie)) {
                // if not 
                menu.add('No Fence', 'nofence',
                function(){
                    menu.close();
                });             
            } else {
                // if it does
                $.each(fencesCookie, function (i, f) {
                    // loop through the cookie and match on the f.contact
                    if (key === f.contact) {
                        // set match to true
                        match = true;
                        // create the 'view' button
                        menu.add(strings[strLang].viewfence, 'fence',
                        function(){
                            viewFence(f.lat, f.lng, f.radius);
                            menu.close();
                        });
                    } 
                });
                // The loop is done so test 'match' to see if we found a match
                if (match === false) {
                    // No matches so create the 'No Fence' button
                    console.log("No Fence : "+key+" "+f.contact)
                }
            }
        }
    }   
}
于 2012-10-11T20:37:32.450 に答える