属性に従ってベクターレイヤーの特徴をフィルタリングしようとしています。type_1、type_2、shape_1、shape_2の4つのチェックボックスがあります。インターフェイスにExtjsを使用していることに注意してください。
最初は、タイプ属性の設定スタイルを「none」または「」にフィルタリングできました...次のように:
switch (f) {
case 'type_1':
if(checked)
filter('show_type_1');
else filter ('hide_type_1);
case 'type_2':
if(checked)
filter('show_type_2');
else filter ('hide_type_2);
}
function filter(value)
{
switch (value){
case 'hide_type_1':
for (i=0;i<=features.length;i++)
if(features[i].attributes.type == 'first')
features[i].style = 'none';
layer.redraw();
case 'show_type_1':
for (i=0;i<=features.length;i++)
if(features[i].attributes.type == 'first')
features[i].style = '';
layer.redraw();
case 'hide_type_2':
for (i=0;i<=features.length;i++)
if(features[i].attributes.type == 'second')
features[i].style = 'none';
layer.redraw();
case 'show_type_2':
for (i=0;i<=features.length;i++)
if(features[i].attributes.type == 'second')
features[i].style = '';
layer.redraw();
}
}
上記のすべてがうまく機能します。type_1のチェックを外すと、すべてのtype_1機能が表示されなくなります。次に、type_2のチェックを外すと、すべてのtype_2機能が表示されなくなります。次にtype_1をもう一度チェックすると、すべてのtype_1機能が表示され、type_2機能は非表示のままになります。
問題は、以下を追加して、shape属性で同じことを行おうとしたときです。
case 'shape_1':
if(checked)
filter('show_shape_1');
else filter ('hide_shape_1);
最初の関数に。
と:
case 'hide_shape_1':
for (i=0;i<=features.length;i++)
if(features[i].attributes.shape == 'first')
features[i].style = 'none';
layer.redraw();
case 'show_shape_1':
for (i=0;i<=features.length;i++)
if(features[i].attributes.shape == 'first')
features[i].style = '';
layer.redraw();
2番目のものに。
shape_1チェックボックスをオフにすると機能します。すべてのshape_1機能が非表示になりました。ただし、チェックして表示すると、チェックを外して非表示にしていたtype_1とtype_2もすべて表示されます。
なぜそうなるのかわかりません。1つの属性(私の場合はタイプ)を処理すると正常に機能しますが、タイプフィルタリングを別の機能属性(形状)と組み合わせようとすると失敗したためです。
私の説明が明確であることを願っています。