2016-11-12 2 views
0

Ich habe Klasse mit @observable (alle Beispiele Typoskript/Pseudo-Code sind)einzelne MobX Autorun oder Reaktion für beobachtbare Eigenschaft aller Objekte in dem Feld Make

class Page { 
    id: number = 0; 

    @observable 
    isVisible: boolean = false; 
} 

let array = [new Page(), new Page(), new Page()]; 

Und einige Funktionen wie:

changeVisibility(obj) 
{ 
    //ajax call like .post("/api/changeVisibility/", {id:obj.id, isVisible:obj.isVisible}) 
} 

Und Ich möchte auf isVisible Änderung an jedem Objekt reagieren.

Ich kann Array aufzählen und machen so etwas wie:

array.forEach(el => { 
    reaction(
     () => el.isVisible, 
     isVis => changeVisibility(el); 
    }); 
}); 

Aber kann ich das mit einer Funktion?
Art von "Array-Beobachter, der auf die Eigenschaftsänderung des Elements reagiert".

Etwas wie folgt aus:

reaction(array, //source 
     (el) => el.isVisible, //observable to react 
     (el) => changeVisibility(el) //callback with object 
    ) 

Antwort

0

Wenn die Reaktion zum Senden der die Aktualisierung einer einzelnen Seite verantwortlich ist, würde ich Setup, die Reaktion in der Page Konstruktor selbst oder eine Nutzenfunktion in-Seite für das haben, so dass Sie Ihr Seiten-Array nicht synchron mit Ihrem Reaktions-Entsorger-Array halten müssen (aber als beste Praxis, entsorgen Sie die Reaktion, wenn Sie die Seite löschen wollen)

Verwandte Themen