Ich habe eine einfache Nativescript App.Nativescript - gebundene Eigenschaft in der Ansicht wird nicht aktualisiert, wenn das Modell in promise.then() eingestellt ist
Wenn ich model.path Eigenschaft aktualisieren, wird es korrekt festgelegt und Label in UI zeigt seinen Wert.
Aber wenn ich die model.path Eigenschaft im .then eingestellt (...) Funktion zurück Versprechen (neue Promise (...)) die Eigenschaft festgelegt ist (Alarm in upload (...) Methode zeigt einen richtigen Wert), aber Label in UI wird nicht mehr aktualisiert. Warum?
Haupt page.xml:
<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded">
<StackLayout>
<Button width="200" height="66" text="Record!" tap="recordVideo"></Button>
<Label text="{{path}}"></Label>
</StackLayout>
</Page>
Haupt-Seite-model.ts:
import { Observable } from 'data/observable';
export class MainPageModel extends Observable {
private _path: string;
constructor() {
super();
}
public get path(): string {
return this._path;
}
public set path(value: string) {
this._path = value;
super.notify({ object: this, eventName: Observable.propertyChangeEvent, propertyName: "path", value: this._path });
}
}
Haupt page.ts:
import { VideoRecorder } from 'nativescript-videorecorder';
import { MainPageModel } from './main-page-model';
import { EventData } from "data/observable";
import { Page } from "ui/page";
var model: MainPageModel;
export function pageLoaded(args: EventData) {
let page = <Page>args.object;
model = new MainPageModel();
page.bindingContext = model;
}
export function recordVideo() {
model.set("path", "clieckedd");
let videorecorder = new VideoRecorder();
let options = {
saveToGallery: true, //default false | optional
duration: 10, //(seconds) default no limit | optional
size: 10, //(MB) default none | optional #android
hd: false, //default false low res | optional
explanation: "Why do i need this permission" //optional on api 23 #android
};
videorecorder.record(options)
.then((data) => {
model.set("path", data.file);
uploadFile(model);
})
.catch((err) => {
console.log(err);
model.path = err;
});
}
function uploadFile(model: MainPageModel) {
alert(model.path);
}
exports.model = model;
Danke
Ich habe das gleiche Problem in einem anderen Anwendungsfall: 'status = new BehaviorSubject (" "); channel.subscribe (m => this.onMessage) '. onMessage aktualisiert den Status mit 'status.next (" bla ")' die Eigenschaft wird korrekt aktualisiert, aber keine Statusänderung util ich klicke auf eine Schaltfläche, die das Update auslöst. Ich benutze eckig, ich bin mir nicht sicher, was passiert, die Dokumentation sagt nichts. –