2016-07-22 9 views
0

シンプルなNativescriptアプリケーションがあります。モデルがpromise.then()に設定されていると、Nativescriptのバインドされたプロパティが更新されない

model.pathプロパティを更新すると、正しく設定され、UIのラベルにその値が表示されます。

しかし、私は戻っ約束の.then(...)機能(新しい約束(...))にmodel.pathプロパティを設定するプロパティが設定されている(警告uploadFileでは、 (...)メソッドが正しい値を示していますが、UIのラベルはもう更新されません。どうして?

メイン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> 

メインページ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 }); 
    } 
} 

メイン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; 

+0

別の使用例で私は同じ問題を抱えています: 'status = new BehaviorSubject (" "); channel.subscribe(m => this.onMessage) 'です。 onMessageは 'status.next(" bla ")でステータスを更新します。プロパティは正しく更新されますが、UI状態の変更はありません。私は更新をトリガするボタンをクリックします。私は角度を使っていますが、何が起こっているのか分かりません。ドキュメントには何も言われていません。 –

答えて

0
ありがとう

あなたはを使用したためですObservableの方法は、public set path(value: string)の代わりにmodel.set("path", data.file); のメソッドです。そのため、super.notifyが呼び出されないため、ラベルのUIが新しい値に更新されません。私はそれがすべきだと思いますmodel.path(data.file)

+0

'model.path(data.file)'は使用できません。メソッドではなくプロパティです。 あなたの答えに、私は 'model.path = data.file;'を最初に使っていましたが、どちらもうまくいきませんでした。誰かが私に書いたよりも、代わりに 'model.set( 'path'、data.file);'を使うべきです。 –

+0

さて、 'public setPath(value:string){}'のように、それをメソッドにしてください。通知をコースの中に入れます –

関連する問題