2015-12-17 2 views
0

У меня есть огромный список аннотаций. Как я могу показать только две конкретные аннотации? например, я хочу по умолчанию проверять только и показывать аннотации для «Рестораны» и «Бары». Если пользователь хочет отобразить больше, то из меню панели действий с Google Maps будет проверять других.Как показать только 2 аннотации

ar args = arguments[0] || {}; 
$.winTitle.text = args.title; 
$.win.addEventListener('open', function(e) { 

    if (OS_ANDROID) { 

     var ab = $.win.activity.actionBar; 

     ab.title = args.title; 

    } 

}); 

var rows = []; 
var checkedRows = []; 

var categories = []; 

var items = []; 

var defaultState = "true"; 

var MapModule = require('ti.map'); 

rows.push(Ti.UI.createTableViewRow({ 
    title : L('checkAll'), 
    color : "#737373", 
    rightImage : '', 
    font:{ 
     fontWeight: 'bold' 
    }, 
    height : 60, 
    checked : 'false', 
    left : 10 

})); 

for (var prop in args.data) { 
    args.data[prop].checked = defaultState; 
    rows.push(Ti.UI.createTableViewRow({ 
     title : prop, 
     color : "#737373", 
     rightImage : OS_ANDROID ? '/images/icons/check.png' : '/icons/check.png', 
     height : 60, 
     left : 10 

    })); 
}; 

$.menu.data = rows; 

var isOpen = false; 
function onBlankTouch(e) { 
    $.popup.animate({ 
     left : 1500, 
     duration : 250 
    }, function() { 
     isOpen = false; 
    }); 
} 

function openMenu(e) { 
    $.popup.animate({ 
     left : isOpen ? 1500 : 0, 
     duration : 250 
    }, function() { 
     isOpen = !isOpen; 
    }); 
} 

function onHomeIconClick() { 
    $.win.close(); 
} 

function onWindowOpened(e) { 
    if (OS_ANDROID) { 
     var activity = $.win.activity; 
     activity.onCreateOptionsMenu = function(e) { 
      e.menu.clear(); 

      e.menu.add({ 
       icon : '/images/icons/menu.png', 
       showAsAction : Ti.Android.SHOW_AS_ACTION_ALWAYS 
      }).addEventListener('click', openMenu); 
     }; 

     activity.invalidateOptionsMenu(); 
    } 
    var timeout; 
    $.mapview.addEventListener('click', function(e) { 
     if (OS_IOS) { 
      if (e.clicksource === 'annotation') 
       clearTimeout(timeout); 
      if (e.clicksource && (e.clicksource === 'pin' || e.clicksource.indexOf('infoWindow', 'title') > -1)) { 
       timeout = setTimeout(function() { 
        for (var i = 0, 
         j = items.length; i < j; i++) { 
         var item = items[i]; 
         if (item.name === e.title) { 
          Ti.App.fireEvent(PW.E.OPEN, { 
           category : { 
            id : item.id, 
            type : 'itemId', 
            data : item 
           }, 
           title : item.name 
          }); 
          return; 
         } 
        }; 
       }, 3000); 
      } 
     } 
     else { 
      if (e.clicksource && (e.clicksource === 'rightPane' || e.clicksource.indexOf('infoWindow', 'title') > -1)) { 
       for (var i = 0, 
        j = items.length; i < j; i++) { 
        var item = items[i]; 
        if (item.name === e.title) { 
         Ti.App.fireEvent(PW.E.OPEN, { 
          category : { 
           id : item.id, 
           type : 'itemId', 
           data : item 
          }, 
          title : item.name 
         }); 
         return; 
        } 
       }; 

      } 
     } 

    }); 

    annotations(); 
} 

function annotations(title) { 
    $.mapview.removeAllAnnotations(); 
    items = []; 
    var ann = []; 
    var currentColor = 0; 
    for (var prop in args.data) { 
     if (args.data[prop].checked=="false") { 
      var color = ++currentColor; 
      if (color > 2) { 
       color = currentColor = 0; 
      } 
      for (var i = 0, j = args.data[prop].items.length; i < j; i++) { 
       var it = args.data[prop].items[i]; 
       items.push(it); 
       ann.push(MapModule.createAnnotation({ 
        latitude : parseFloat(it.lat_long[0]), 
        longitude : parseFloat(it.lat_long[1]), 
        title : it.name, 
        canShowCallout : false, 
        rightButton : OS_ANDROID ? '/images/arrow.png' : '/icons/arrow.png', 
        item : it.name, 
        pincolor : color 
       })); 
      }; 
     } 
    } 

    if (ann.length > 0) 
     $.mapview.addAnnotations(ann); 
    $.mapview.setLocation({ 
     latitude : 37.9908997, 
     longitude : 23.7033199, 
     animate : true, 
     latitudeDelta : 7.50, 
     longitudeDelta : 7.50 
    }); 
} 

function menuClick(e) { 

    console.log(e.row.title); 
    console.log(e.rowData.title); 
    if (e.row.title == L('checkAll')) { 
     if (e.row.checked == "true") { 

      e.row.rightImage = ''; 
      e.row.checked = "false"; 
     } else { 

      e.row.rightImage = OS_ANDROID ? '/images/icons/check.png' : '/icons/check.png'; 
      e.row.checked = "true"; 

      for (var i = 1; i < rows.length; i++) { 
       rows[i].rightImage = ''; 
       args.data[rows[i].title].checked = "false"; 

      } 
      $.mapview.removeAllAnnotations(); 

     } 
    } else { 


     if (args.data[e.row.title].checked == "false") { 
      args.data[e.row.title].checked = "true"; 
      e.row.rightImage = ''; 

     } else { 
      args.data[e.row.title].checked = "false"; 
      e.row.rightImage = OS_ANDROID ? '/images/icons/check.png' : '/icons/check.png'; 

     } 

     annotations(); 
    } 
} 

ответ

2

Вам придется самому справиться с этой логикой. Добавьте это туда, где вы перебираете элементы, а затем решаете, нужно ли их добавлять в зависимости от логических свойств. Затем, когда пользователи меняют фильтры, измените эти логические значения и rerender.

Смежные вопросы