2016-05-31 9 views
1

Ich arbeite gerade mit einem Abschnitt einer Backbone-Anwendung, und wir versuchen zu verfolgen, welche Elemente geladen werden und welche Attribute wir zeigen müssen, in unser Modell, das wir etwas haben, das hören zu ändern Ereignis auf Objekt im Backbone-Modell

wie folgt aussieht

this.set('_loaded', {items: false, files: false, currentTab:"home"});

mit der App kann ein Benutzer etwas klicken, um ein Verfahren zu schießen, die ungefähr so ​​laufen würde,

this.model.set({ _loaded : {currentTab : $click.data('tab')} });

bei der Initialisierung,

in der Sicht Wie höre ich auf diese Änderung, um darauf zu reagieren? Ich habe folgendes versucht,

this.listenTo(this.model, 'change:_loaded.currentTab', this.switchView); 
this.listenTo(this.model.get('_loaded').currentTab, 'change', this.switchView); 

aber ohne Erfolg, was ist der richtige Weg, um ein Objekt innerhalb eines Modells zu verändern und auf diese Veränderungen zu reagieren?

Antwort

0

Backbone.DeepModel wurde für diesen Zweck gebaut. Aus dem Repomodus:

Ermöglicht das Abrufen und Festlegen verschachtelter Attribute mit Pfadsyntax, z. benutzer.typ.

Auslöser ändern Ereignisse für Änderungen an verschachtelten Attributen.

Ich habe eine schnelle Demo, die beide eine verschachtelte Attribut Einstellung und für verschachtelte Attributänderungen hören: https://jsfiddle.net/83e4u420/

verschachteltes Attributs Rahmen: this.model.set('_loaded.currentTab', currentTab);

für ein verschachteltes Attribut Zuhören ändern: this.listenTo(this.model, 'change:_loaded.currentTab', this.switchView);