Search code examples
titaniumtitanium-modulescreatewindow

containingTab cause on undefined is not an object


In my titanium based application,My navigation flow as like the following

HomeVu -> Subvu1 -> Subvu2

While am trying to navigate from Subvu1 view to Subvu2 it shows an error that

  Script Error 
  {
  backtrace = "#0 () at :0";
  line = 40;
  message = "'undefined' is not an object (evaluating 'ReportSubWindow.containingTab.open')";
  name = TypeError;
  sourceId = 300153536;
  sourceURL = "file:///Users/administrator/Library/Application%20Support/iPhone%20Simulator/7.1/Applications/9A6B5752-F198-48AC-9E23-2A0DC31A2BD2/test.app/SubVu/text.js";
  } 

Here the code

HomeVu

  button2.addEventListener('click', function() 
  {
    var FindAnExpertSubWindow = require('SubVu/email');
    self.containingTab.open(new FindAnExpertSubWindow('My Mail'));
  });

Subvu1

function FindAnExpertSubWindow(title) 
{
var findAnExpertSubWin = Ti.UI.createWindow({
    backgroundColor : 'white', });
var button1 = Ti.UI.createButton({
    backgroundImage: 'ui/images/Untitled.png',
    height:32,
    width:87,
    top:90,
    left:115,

});

button1.addEventListener('click', function() 
{
var FindAnExpertSubWindow = require('SubVu/email');
    findAnExpertSubWin.containingTab.open(new FindAnExpertSubWindow('My Mail'));
});
findAnExpertSubWin.add(button1);
return findAnExpertSubWin;
    };
 module.exports = FindAnExpertSubWindow; 

Subvu2

 function ReportSubWindow(title) 
 {
var reportSubWin = Ti.UI.createWindow({
backgroundColor : 'black',
    });
 return reportSubWin;
 };
 module.exports = ReportSubWindow; 

How to navigate from Subvu1 to Subvu2?


Solution

  • When you are creating Subvu1 window you have to set containingTab property the same way as you do in HomeVu window. Your code example is missing that part of code but probably it could look like this:

    HomeVu

    button2.addEventListener('click', function() {
        var FindAnExpertSubWindow = require('SubVu/email');
        self.containingTab.open(new FindAnExpertSubWindow('My Mail', self.containingTab));
    });
    

    Subvu1

    function FindAnExpertSubWindow(title, containingTab) {
        var findAnExpertSubWin = Ti.UI.createWindow({
            backgroundColor : 'white',
            containingTab: containingTab,
        });
        /* ... */
    });
    

    Another way of solving is to stop passing reference to Tab object between every Window and just create one global object, which you will use for opening new windows.

    If it doesn't help, post more example code.