help passing a view

as per normal, in way over my head, but thanks to the support of this community I have already made something I am proud of. 

I'm now working on the next step which is to pass a view to a new menu which shows an array of dates, allowing onselect to push a new view passing an array key to show some data. 

My issue is I'm struggling to pass the view from the WidgetDelegate. Its probably the wrong way to do this but I cannot figure how to do this differently.

subview is supposed to be the New menu ArraySettingsView

widgetDelegate:-

using Toybox.WatchUi as Ui;
using Toybox.System as Sys;
using Toybox.Attention;

class LETideWidgetDelegate extends Ui.BehaviorDelegate {

    var mainView;
   var subView;

    function initialize(view) {
         // subView = subview;
          mainView = view;
       
        BehaviorDelegate.initialize();
    }

    function onNextPage() {
        return nextScreen();
    }

    function onPreviousPage() {
        return nextScreen();
    }

    function onSelect() {
      //   return nextScreen();
         WatchUi.pushView( new ArraySettingsView(), new ArraySettingsDelegate(subView), WatchUi.SLIDE_IMMEDIATE);
        return true;
    }

    function onMenu() {
        WatchUi.pushView( new MenuSettingsView(), new MenuSettingsDelegate(mainView), WatchUi.SLIDE_IMMEDIATE);
        return true;
    }

	function nextScreen() {
        mainView.screenNum = mainView.screenNum == 1 ? 2 : 1;
        Ui.requestUpdate();
        return true;
    }
}

ArraySettings

using Toybox.Application as App;
using Toybox.Activity;
using Toybox.Graphics as G;
using Toybox.WatchUi;
using Toybox.Attention;

using Toybox.Time;
using Toybox.Time.Gregorian as Calendar;
class ArraySettingsView extends WatchUi.Menu2 {

   
    function initialize() {  
var nc = "";

	Menu2.initialize({:title=>R(Rez.Strings.AppName)});
		// Get tide extended data
		var tidesDataArr = App.Storage.getValue("tdata");
		var tdsize = tidesDataArr["dates"].size();					////////working on for tdata array
		for(var i =0; i < tdsize; i++){


		Menu2.addItem(new WatchUi.MenuItem(tidesDataArr["dates"][i], null, 1,    null));
			$.p("LETideDataArr removing diff " + tdsize + " " +  tidesDataArr["dates"][i] );
		}	


		
			Menu2.addItem(new WatchUi.MenuItem("test2", null, 1, null));
		
		Menu2.addItem(new WatchUi.MenuItem(R(Rez.Strings.AppVersionTitle), R(Rez.Strings.AppVersion), 3, null));
    }
}

//================================================
class ArraySettingsDelegate extends WatchUi.Menu2InputDelegate { 

    var subView;
	var mainView;
    function initialize(subview) {
    	subView = subview;
		// mainView = view;
        Menu2InputDelegate.initialize();
    }

  	function onSelect(item) {
  		var id=item.getId();
  		if (id.equals(1)) {
	        // Refresh Data immediatelly on Menu press
//still showsmainview	        subView.letRequest();	
	        vibrate();
	 
		    WatchUi.pushView(new ArraySettingsView(), new LETideArrayDelegate(subView), WatchUi.SLIDE_IMMEDIATE);
		} else if (id.equals(2)) {
			subView.startGPS();
			vibrate();
  			WatchUi.popView(WatchUi.SLIDE_IMMEDIATE);
		} else if (id.equals(3)) {
  			WatchUi.popView(WatchUi.SLIDE_IMMEDIATE);
  		}
  	}

	function vibrate() {
        if (Attention has :vibrate) {
		    var vibeData = [ new Attention.VibeProfile(100, 300)]; // 100% for 300 mseconds
		    Attention.vibrate(vibeData);
		}
	}
}

I hope this explains enough, but if not please ask questions and I'll try to expand. 

I want the mainmenu to remain a basic menu, but on select show a new menu with an array of dates which when 1 is selected calls a new view passing the date as the key......