Een standaard navigator actie is, voor wat betreft javascript, een apart geval. Normaal gesproken zou je de actie laten overerven van de actie die je wil aanpassen en dan vervolgens datgene aanpassen wat veranderd moet worden. Met een navigator actie werkt dat niet; een navigator actie heeft twee belangrijke kenmerken: id en navigatorActionId. Deze bepalen de werking maar ook het wel/niet beschikbaar/zichtbaar zijn. Als je een actie laat overerven wijzigt de id en wordt de navigatorActionId niet meer gezet. Dit heeft tot gevolg dat de actie niet meer beschikbaar komt.

Dit kun je uiteraard aanpassen door ook de isEnabled en de isVisible te overschrijven. Maar dat betekent dat, als je dat ongewijzigd wilt laten, je code moet kopieren. Dat is niet gewenst. Omdat ik tot nu toe nog niet heb kunnen achterhalen waar de navigatorActionId property wordt gezet heb ik de volgende workaround:

Maak een klasse die erft van de actie die je wilt aanpassen. De hierboven genoemde properties zorgen uiteindelijk voor het zetten van de property action van de klasse die de implementatie van de uit te voeren actie is. Het is dus zaak om deze action op tijd goed te zetten. Deze actie wordt als eerste gebruikt bij het bepalen of de actie beschikbaar is in de isEnabled methode. Om de actie te kunnen zetten heb je de waarde van de navigatorActionId property van de oorspronkelijke actie nodig. Als je deze hebt achterhaald kun je de action property goed zetten in de isEnabled methode:

isEnabled: function() {
   this.resetAction();
   return this.inherited(arguments);
}

resetAction: function() {
   if (!this.actionReset) {
      this.action = this._loadActions( [MenuManager.actions['<originele navigatorActionId>']])[0];
      this.actionReset = true;
   }
}

constructor: function() {
   this.inherited(arguments);
   this.actionReset = false;
}

In bovenstaande code wordt in de isEnabled methode  de actie opnieuw binnengehaald op basis van de navigatorActionId van de te wijzigen actie. Hierdoor worden de isEnabled en isVisible van de oorspronkelijke actie gebruikt. In de execute kun je vervolgens je aanpassingen doorvoeren.