2016-11-30 3 views
0

Ich versuche eine Überwachung zu aktivieren, wenn sich eine Objekteigenschaft in Aurelia ändert. Ich habe vorher keine Observablen benutzt, also bitte hilf mir. Basierend auf der Dokumentation, hier ist, was ich denke, würde funktionieren, aber ich vermute, der Punkt wirft den Namen der Funktion oder beobachtbar.Aurelia beobachtbar mit Objekteigenschaft

export class EventEdit { 
    record = { 
    ev_date_start, 
    ev_date_end, 
    ev_description 
    }; 
    @observable record.ev_date_start; 

    record.ev_date_startChanged(newValue, oldValue) { 
    console.log("ev_date_start changed from " + oldValue + " to " + newValue); 
    } 
} 

Nichts geschieht, wenn ich den Wert von ev_date_start ändern.

Antwort

4

Es ist besser, eine Klasse zu definieren, wenn Sie ein komplexes Objekt benötigen.

import { observable } from 'aurelia-framework'; 

export class EventEdit { 
    constructor() { 
    this.model = new EventModel(); 

    setTimeout(() => { 
     this.model.ev_date_start = "test"; 
    }, 2000); 
    } 
} 

export class EventModel { 
    @observable ev_date_start; 
    ev_date_end; 
    ev_description; 

    ev_date_startChanged(newValue, oldValue) { 
     console.log("ev_date_start changed from " + oldValue + " to " + newValue); 
    } 
} 

Eine andere Lösung wird mit dem BindingEngine:

import {inject, BindingEngine} from 'aurelia-framework'; 

@inject(BindingEngine) 
export class EventEdit { 
    record = { 
    ev_date_start, 
    ev_date_end, 
    ev_description 
    }; 

    constructor(bindingEngine) { 
    this.bindingEngine = bindingEngine; 
    } 

    attached() { 
    this.subs = this.bindingEngine 
     .propertyObserver(this.record, 'ev_date_start') 
     .subscribe(this.ev_date_startChanged); 
    } 

    detached() { 
    this.subs.dispose(); 
    } 

    ev_date_startChanged(newValue, oldValue) { 
    console.log("ev_date_start changed from " + oldValue + " to " + newValue); 
    } 
} 
+0

Dank! Ich hatte gehofft, das zu vermeiden, da es viele Eigenschaften gibt, die ich nicht eingeschlossen habe, um das Beispiel einfach zu halten. Ich werde nachsehen, ob es für die nächsten ein oder zwei Tage noch andere Lösungen gibt, und wenn es keine gibt, werde ich deine als die akzeptierte Antwort markieren. Danke, dass du dir die Zeit genommen hast, Fabio! – LStarky

+0

Es gibt eine andere Lösung, die ich poste –

+0

Siehe die aktualisierte Antwort! Ich werde sehen, ob es einen Weg gibt, @observable –