2

まず私は初心者で、これが私の最初のアプリです。私はこのアプリに数日間取り組んでいますが、立ち往生しています。ページ remote_read-org-3.js で、状態のリストであるボタンを作成しています。これらは、mySQL データベースから取得されています。この部分は機能しています。ボタンがクリックされたときに、stateabbr を次のウィンドウに渡す必要があります。問題は、どのボタンをクリックしても、リストの最後の状態を通過することです。これは remote_read-org.js です。最もクリーンなコードではないかもしれませんが、まだハウツーの作業を行っています。

var currentWin = Ti.UI.currentWindow;

var view02 = Titanium.UI.createView({
         top:0,
        left:0,
        height: '100%',
        width: '100%',
        backgroundImage: 'images/wcs_background_2.jpg',
})

var label01 = Titanium.UI.createLabel({
    text: "US STATES",
    top:25,
    left:125,
    height:'auto',
    width:'175',
    textAlign: "left",
    font:{fontFamily:'Arial',fontWeight:'bold',fontSize:24},
    color: "#1c1e3b",
})

var label02 = Titanium.UI.createLabel({
    text: "Attachments",
    top:50,
    left: 125,
    height:'24',
    width:'150',
    textAlign: "left",
    font:{fontFamily:'Arial',fontWeight:'bold',fontSize:18},
    color: "#1c1e3b",
})

var view01 = Titanium.UI.createView({
        top:90,
        left:70,
        height: 375,
        width: Ti.UI.FILL,
})

var currentWin = Ti.UI.currentWindow;

var sendit = Ti.Network.createHTTPClient();
sendit.open('GET', 'http://localhost/test/read.php');
sendit.send();
sendit.onload = function(){
    var json = JSON.parse(this.responseText);

    var json = json.states;

    var dataArray = [];

    var scroller =  Ti.UI.createScrollView({
    height: Ti.UI.FILL,
    width: Ti.UI.FILL,
});

    var brandView = Ti.UI.createView({   //Primary view for buttons
        title: 'Hello',
        top:0,
        left:0,
        height      : Ti.UI.FILL,
        width       : Ti.UI.FILL,
        contentHeight : "auto",
        backgroundColor : "transparent",
        layout      : "horizontal",
        horizontalBounce :false,
});

scroller.add(brandView);

view01.add(scroller);

    var pos;
    for( pos=0; pos < json.length; pos++){

        dataArray.push({title:'' + json[pos].stateAbbr + ''});
        // set the array to the tableView
        var btn = Ti.UI.createButton({
        title: json[pos].stateAbbr,
        width: 60,
        height: 70,
        top: pos * 0, // space the buttons at 105
        left: 2,
        backgroundImage: 'images/state_icon.png', 
        MyID: json[pos].stateAbbr,
    });

    btn.addEventListener('click', function(e) { 

        var newWindow = Titanium.UI.createWindow({ 
            url: 'remote_read_acc.js', 
            MyID: btn.MyID
            }); 
newWindow.open(newWindow);

});

    brandView.add(btn);

    };

};

var brandView = Ti.UI.createView({
});

view02.add(view01);

view02.add(label01);
view02.add(label02);

currentWin.add(view02);

stateabbr をこの新しいウィンドウ remote_read_acc.js に渡す必要があります

var currentWin = Ti.UI.currentWindow;

var view02 = Titanium.UI.createView({
         top:0,
        left:0,
        height: '100%',
        width: '100%',
        backgroundImage: 'images/wcs_background_2.jpg',
})

var label01 = Titanium.UI.createLabel({
    text: "US STATES",
    top:25,
    left:125,
    height:'auto',
    width:'175',
    textAlign: "left",
    font:{fontFamily:'Arial',fontWeight:'bold',fontSize:24},
    color: "#1c1e3b",
})

var label02 = Titanium.UI.createLabel({
    text: "Attachments",
    top:50,
    left: 125,
    height:'24',
    width:'150',
    textAlign: "left",
    font:{fontFamily:'Arial',fontWeight:'bold',fontSize:18},
    color: "#1c1e3b",
})

var view01 = Titanium.UI.createView({
        top:90,
        left:90,
        height: 375,
        width: Ti.UI.FILL,
})

var currentWin = Ti.UI.currentWindow;

var sendit = Ti.Network.createHTTPClient();
sendit.open('GET', 'http://localhost/test/attachments.php');
sendit.send();
sendit.onload = function(){
    var json = JSON.parse(this.responseText);

    var json = json.attachments;

    var dataArray = [];

    var scroller =  Ti.UI.createScrollView({
    height: Ti.UI.FILL,
    width: Ti.UI.FILL,
});

    var brandView = Ti.UI.createView({   //Primary view for buttons
        title: 'Hello',
        top:0,
        left:0,
        height      : Ti.UI.FILL,
        width       : Ti.UI.FILL,
        contentHeight : "auto",
        backgroundColor : "transparent",
        layout      : "horizontal",
        horizontalBounce :false,
});

scroller.add(brandView);

view01.add(scroller);

    var pos;
    for( pos=0; pos < json.length; pos++){

        dataArray.push({title:'' + json[pos].attachmentName + ''});
        // set the array to the tableView
        var btn = Ti.UI.createButton({
        title: json[pos].attachmentName ,
        width: 190,
        height: 30,
        top: pos * 0, // space the buttons at 105
        left: 2,
        MyID: json[pos].attachmentName,
    });

    btn.addEventListener('click', function(e) { 

        var newWindow = Titanium.UI.createWindow({ 
            url: '', 
            }); 
newWindow.open(newWindow);

    brandView.add(btn);

    };

};


var brandView = Ti.UI.createView({
});


view02.add(view01);

view02.add(label01);
view02.add(label02);

currentWin.add(view02);

また、渡した stateabbr を使用して dataArray をクエリし、配列から stateabbr 変数に一致する値だけを取得する必要があります。このページに表示できるようにします。どんな助けでも大歓迎です

4

1 に答える 1

0

リストの最後の状態を渡しているのは、for ループにイベント リスナーを追加し、JavaScript スコープ ルールを無視しているためです (これは確かに理解するのが最も簡単ではありません)。つまり、何が起こっているかというと、それbtnは常にあなたが最後btnに作成したものと同じです。代わりにこれを試して、sourceすべてのイベントの属性を使用してください。これによりclick、内部スコープが for ループの外部スコープから分離されます。

btn.addEventListener('click', function(e) { 

    var newWindow = Titanium.UI.createWindow({ 
        url: 'remote_read_acc.js', 
        MyID: e.source.MyID // Get the actual button that was clicked
    }); 
    newWindow.open(newWindow);
});

これをさらに最適化するには、イベント リスナー関数をループの外に移動します。また、window の属性は使用しませんurl。まったく別の JavaScript コンテキストが開かれるため、かなり重いため、代わりにrequire()CommonJS ディレクティブを使用してみます。

于 2013-01-27T04:31:35.823 に答える