2016-04-01 13 views
0

Ich möchte meine verschachtelte Ansicht in Backbone-App mit Routen navigieren. Ich habe nächsten Code:verschachtelte Ansichten mit Backbone-Routen

var StoreRouter = Backbone.Marionette.AppRouter.extend({ 

    appRoutes: { 
    'item/:name/' : 'showItem', 
    "item/:name/species/:speciesName/" : "showSpecies" 
    } 

}); 

var StoreCtrl = Marionette.Object.extend({ 

    showItem: function(name){ 
    console.log("showItem"); 
    /* execute function for show Item */ 
    }, 

    showSpecies: function(name, speciesName){ 
    console.log("showSpecies"); 
    /* execute function for show Species inside Item Layout */ 
    } 

}); 

Also, ich brauche Spezies zu zeigen, wenn Route "item /: Name/Art /: species /" aber ich nur bekommen Auslösung showSpecies fucntion, nicht beide. Was soll ich tun, um ShowItem und ShowSpecies Funktionen auszulösen, wenn route "item /: name/species /: speciesName /" ist?

Antwort

1

Hier gibt es nichts Neues. Rufen Sie einfach Ihre showItem Funktion direkt von showSpecies.
Darüber hinaus können Sie routes Hash statt appRoutes verwenden und dann ist es möglich, dies zu tun:

var StoreRouter = Backbone.Marionette.AppRouter.extend({ 

    routes: { 
    'item/:name/' : 'showItem', 
    'item/:name/species/:speciesName/' : function(){ 
     this.showItem(); 
     this.showSpecies(); 
    } 
} 

});

+0

Vielen Dank. Aber in meinem Fall verursacht diese Lösung jedes Mal einen neuen Gegenstand, wenn ich eine andere Spezies zeigen möchte. Gibt es eine Möglichkeit, dem Nachladen von Gegenständen zu entgehen und nur richtige Arten zu zeigen, wenn /: ArtenName/Änderungen? –

+0

@PavelPoberezhnyi natürlich. Du könntest irgendwo deinen aktuellen Gegenstand speichern und am Anfang deiner 'showItem'-Funktion einen Haken setzen:' if (currentItem === newItem) gebe false zurück; ' –

+0

Vielen Dank, ich werde es versuchen –