1

我需要使用從JSON響應返回的新數據更新win1.title(標籤)。 我可以在我的控制檯上打印win1.title值,但我無法賦予它新的值!如何更新當前窗口中的文本標籤

app.js

var win1 = Titanium.UI.createWindow({ 
    title:'Tab 1', 
    backgroundColor: 'black', 
    layout: 'vertical', 
    url: 'win1.js', 
    title: 'Loading...', 
    artist: '' }); 


win1.open(); 

//Fetching data 

var jsonData = ''; var pointer = 0; 

var url = "http://example.com"; var xhr = Ti.Network.createHTTPClient({ 
    onload: function(e) { 

     jsonData = JSON.parse(this.responseText).response.songs; 



     //HERE I NEED TO UPDATE win1.title with title returned by JSON 
     /* 
      if a print win1.title it works correctly. 
      console.log(win1.title); 

      but if I try to assign data to win1.title nothing happens, even a error! 

     */ 


     win1.addEventListener('swipe', function(e) { 
         console.log("win1 title:" + win1.title);   win1.title = jsonData[pointer].title;   win1.artist = jsonData[pointer].artist_name;   win1.image = jsonData[pointer].tracks[0].release_image; 

        }); 

    }, 
    onerror: function(e) { 
     console.log(e); 
    }, 
    timeout:20000 /* in milliseconds */ }); xhr.open("GET", url); xhr.send(); // request is actually sent with this statement 

win1.js

(function() { 

    var win1 = Ti.UI.currentWindow; 

    var image = Ti.UI.createImageView({ 
     image:win1.image, 
     top: 40 
    }); 

    var title = Ti.UI.createLabel({ 
     color: 'white', 
     font: { fontSize:38 }, 
     text: win1.title, 
     textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER, 
     top: 20, 
     width: 'auto', height: 'auto' 
    }); 

    var artist = Ti.UI.createLabel({ 
     color: 'white', 
     font: { fontSize:28 }, 
     text: win1.artist, 
     textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER, 
     top: 30, 
     width: 'auto', height: 'auto' 
    }); 


    win1.add(title); 
    win1.add(artist); 
    win1.add(image); 


})(); 

回答

4

設置win1.title = 'some title';是不會做你認爲它會在這種情況下。 Titanium Window objects有一個title屬性,根據您是爲iOS還是Android構建的,您將在模態窗口的頂部或窗口處於製表符或導航組中時看到此標題。

您的代碼正在更新此標題,但您可能沒有看到它。 (請嘗試將modal:true添加到您的createWindow()聲明中。)另外,您已經設置了2 title屬性,因此請刪除其中的一個。

要更改標籤文本在win1.js名爲「標題」的變量,你可以做到以下幾點:

在win1.js,添加以下內容:

win1.updateTitle = function(newTitle){ 
    title.text = newTitle; 
} 

然後,回在app.js,去哪裏要更新標題,做:

win1.updateTitle('new title'); 

此外,你應該考慮使用CommonJS的與鈦項目:

CommonJS Best Practices

+0

通過強調CommonJS的重要性(因此是良好的體系結構) –