2016-07-22 49 views
0

我有一個簡單的Nativescript應用程序。當模型設置爲promise時,未更新Nativescript - 綁定屬性的視圖。()

當我更新model.path屬性它設置正確,UI中的標籤顯示其值。

但是,當我在。那麼(...)退還承諾功能(新希望(...))設置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」)更新狀態'屬性被正確更新,但是,沒有用戶狀態改變ultil我點擊了一些按鈕,這會觸發更新。我使用角度,我不知道發生了什麼,文檔沒有說什麼。 –

回答

0

我想那是因爲你使用了set Observable的方法,它是model.set("path", data.file); ,而不是您的public set path(value: string)。這就是爲什麼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){}'。當然,通知裏面 –

相關問題