如何根据单击的注释打开带有属性的窗口

how to open a window with properties based on an annotation clicked

本文关键字:属性 窗口 注释 何根 单击      更新时间:2023-09-26

我使用钛和谷歌地图v2的安卓模块。我有一个表视图,当单击时,基于行打开一个新窗口,我正在传递一些基于rowData的属性给它。这工作得很好,现在我的问题是,用户有一个选项,点击地图视图按钮,看到地图上的大头针列表,而不是我的表格视图。我需要能够让用户单击任何给定的注释(就像用户可以单击一行的方式)并打开一个窗口,根据单击的特定注释将属性传递给它。我不知道该怎么处理。我在地图上有一个事件监听器,正在检查源,但我不知道如何访问打开新窗口所需的注释的属性。下面是我的窗口代码,该窗口包含一个地图视图,其中包含一组从前一页传递给它的注释,其中web服务拉下信息并在每次循环迭代中添加注释:

var MapModule = require('ti.map');
var Map = MapModule.createView({
    userLocation: true,
    mapType: MapModule.NORMAL_TYPE,
    animate: true,
    region:{latitude: 53.422606, longitude: -7.944465, latitudeDelta: 4, longitudeDelta: 4},
    top: '50dp',
    left:'10dp',
    right:'10dp',
    bottom:'10dp',
    borderRadius:6,
    annotations:self.MapAnnotations,
    zIndex:200
});

Map.addEventListener('click', function(e){
    Ti.API.info("e.type ----------------- " + e.type);
    Ti.API.info("stringified e.clicked source ---------------- " + JSON.stringify(e.clicksource));
    var check = JSON.stringify(e.clicksource);
    if (JSON.stringify(e.clicksource) == '"title"'){
        console.log("Can i get the parent ------- " + e.parent);
        console.log("In the if statment for title---------------");
        console.log("e.jobID --------- " + e.jobID);
        var w = Titanium.UI.createWindow({
                url:'ui/handheld/SearchJobsDetailed.js',
                backgroundColor: "#204581",
                JobID:e.jobID,
                Title:e.title,
                Trade:e.trade,
                Urgency:e.urgency,
                Description: e.description,
                Photo: e.photo,
                JobStatus: e.jobStatus,
                ClientID: e.clientID,
                DatePosted: e.datePosted,
                Email:e.Email,
                Mobile:e.Mobile,
                navBarHidden:true,
                APP_URL:e.APP_URL
            });
            w.open();   
    }
});

这是我的代码片段,从前一页的地图,即页面与tableview:

Map_view.addEventListener("click", function (e){
    var Map_window=Ti.UI.createWindow({
        url:"ui/handheld/MapWindow.js",
        backgroundColor: "transparent",
        navBarHidden:true,
        APP_URL:APP_URL,
        modal:false,
        MapAnnotations:MapAnnotations
    });
SearchJobs_Tab.open(Map_window, {animated:true});
});

和我将注释推入数组的部分:

for(i=0;i<data.length;i++){
    Annotations[i]= MapModule.createAnnotation({
        latitude: data[i].Latitude, 
        longitude: data[i].Longitude, 
        title: capitaliseFirstLetter(data[i].title),
        jobID:data[i].jobID,
        title:data[i].title,
        trade:data[i].trade,
        urgency:data[i].urgency,
        description: data[i].description,
        datePosted: data[i].datePosted,
        photo: data[i].photo,
        jobStatus: data[i].jobStatus,
        clientID: data[i].clientID,
        Email: data[i].Email,
        Mobile: data[i].Mobile,
        APP_URL:APP_URL
    });
    MapAnnotations.push(Annotations[i]);

使用e.annotation引用已单击的标注。你的Map click eventListener应该看起来像这样。

Map.addEventListener('click', function(e){
    if (e.clicksource === 'pin'){
        var w = Titanium.UI.createWindow({
            url:'ui/handheld/SearchJobsDetailed.js',
            backgroundColor: "#204581",
            JobID:e.annotation.jobID,
            Title:e.annotation.title,
            Trade:e.annotation.trade,
            Urgency:e.annotation.urgency,
            Description: e.annotation.description,
            Photo: e.annotation.photo,
            JobStatus: e.annotation.jobStatus,
            ClientID: e.annotation.clientID,
            DatePosted: e.annotation.datePosted,
            Email:e.annotation.Email,
            Mobile:e.annotation.Mobile,
            navBarHidden:true,
            APP_URL:e.annotation.APP_URL
        });
        w.open();   
    }
});