これはかなり単純なケースですが、明らかに欠落しています。ビューにバインドされるモデルがあります。次に、HTTP呼び出しを使用してモデルをロードします。 Viewが更新されないのはなぜですか?私はそれが一方通行の全体的なポイントだと思った。NativeScriptの一方向データバインディングではビューが更新されません
私は、http呼び出しから期待しているデータを取得していることを確認しました。
更新 は、私が実際にボタン方式のみのいずれかの値を設定していても、ボタンプッシュの両方のフィールドのためのHTTPロードされたデータで画面を更新する画面とデータバインディングにボタンを追加しました。ですから、NativeScriptにバグがあるか、私は間違って何かしていません。
更新2ボタンをクリックするだけでバインディングが実行されます。空のタップハンドラを持つようにコードを修正しました。ボタンをクリックするだけでバインドされます。
typescriptです
import { Component, ChangeDetectionStrategy, OnInit } from "@angular/core";
import { Job } from "../../shared/customer/job";
import { Http, Headers, Response } from "@angular/http";
import { Observable } from "rxjs/Rx";
@Component({
selector: "my-app",
templateUrl: "pages/job-details/job-details.html",
changeDetection: ChangeDetectionStrategy.OnPush
})
export class JobDetailsComponent implements OnInit {
job: Job;
salesAssociateName: string = "x";
constructor(private http: Http) {
this.job = new Job();
}
ngOnInit() {
this.getJob(1234);
}
getJob(leadId: number) {
var url = "https://url-not-for-you/job?franchiseeid=48&leadid=" + leadId;
var headers = this.createRequestHeader();
this.http.get(url, { headers: headers }).map(response => response.json())
.do(data => this.setData(data[0]))
.subscribe(
() => this.success(),
(error) => this.error()
);
}
private createRequestHeader() {
let headers = new Headers();
headers.append("AuthKey","blah");
headers.append("AuthToken", "blee");
return headers;
}
setData(job) {
this.job.FullName = job["FullName"];
this.job.SalesAssociateName = job["SalesAssociateName"];
this.salesAssociateName = this.job.SalesAssociateName;
console.log("Found job for customer: " + job["FullName"]);
}
success() {
// nothing useful
}
error() {
alert("There was a problem retrieving your customer job.");
}
changeSA() {
}
}
HTML
<StackLayout>
<Label [text]="job.FullName"></Label>
<Label [text]="salesAssociateName"></Label>
<Button text="Push" (tap)="changeSA()"></Button>
</StackLayout>
実際には、観察可能なインプットは時間からに作業したり、動作しませんnativescriptで 'onPush'を使用しています。理由を知らない。 –