Мне это кажется довольно простым случаем, но я явно что-то упускаю. У меня есть модель для привязки к представлению. Затем я загружаю модель с помощью Http-вызова. Почему не обновляется View? Я думал, что в этом весь смысл односторонней привязки.
Я подтвердил, что получаю данные, которые ожидаю от HTTP-вызова.
Обновить. Я добавил кнопку на экран, и привязка данных фактически обновит экран с помощью данных, загруженных по протоколу http, для обоих полей при нажатии кнопки, даже если метод кнопки устанавливает только одно из значений. Так что либо в NativeScript есть ошибка, либо я что-то не делаю неправильно.
Обновление 2. Привязка срабатывает при нажатии кнопки. Я изменил код, чтобы иметь пустой обработчик касаний, и просто нажатие кнопки приводит к привязке.
машинопись
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>