Es muss etwas sein, das ich überwache, aber wenn ich eine Eigenschaft (ein Objekt) eines Observable ändert, wird das UI zum ersten Mal wie erwartet aktualisiert. Aber das zweite Mal sehe ich keine Änderung, obwohl das Observable geändert wurde und eine Benachrichtigung gesendet hat (ich sehe das in der receiveNotification-Funktion). Siehe Code unten, die Änderung erfolgt über einen Dialog und die UnitTap-Funktion. Was fehlt mir hier?NativeScript UI reagiert nicht auf propertyChange von Observable bei wiederholten Änderungen
var pageData;
function setPageData (product) {
pageData = new Observable({
units: restClientUnits.viewModelArray,
vatpercentages: restClientVatPercentages.viewModelArray,
product: product
});
loadLists();
}
function receiveNotification(args) {
console.log("Notification received...");
console.log(args.propertyName);
console.log(args.value.unit);
}
exports.loaded = function(args) {
var page = args.object;
var product = page.navigationContext;
//Extra listener just to check if notification is send
product.addEventListener(Observable.propertyChangeEvent, receiveNotification, this);
setPageData(product);
page.bindingContext = pageData;
};
exports.unitTap = function() {
var unitNames = [];
pageData.get("units").forEach(function(unit) {
unitNames.push(unit.get("unit"));
});
dialogs.action({
message: "Select unit",
cancelButtonText: "Cancel",
actions: unitNames,
}).then(function (result) {
pageData.get("units").forEach(function(obj) {
if (obj.unit === result) {
pageData.get("product").set("unit", obj);
}
});
console.log("New set unit: " + pageData.get("product").get("unit").unit);
console.log("Dialog result: " + result)
});
};
<Page.actionBar>
<ActionBar title="Products">
<NavigationButton text="go back" android.systemIcon = "ic_menu_back" tap="goBack"/>
<ActionBar.actionItems>
<ActionItem text="Save" position="right" tap="save"/>
</ActionBar.actionItems>
</ActionBar>
</Page.actionBar>
<StackLayout>
<GridLayout cols="*" rows="auto, auto">
<Label text="productnaam: " cssClass="field-title" />
<TextField text="{{ product.productName }}" cssClass="field" row="1" col="1" />
</GridLayout>
<GridLayout cols="*" rows="auto, auto">
<Label text="beschrijving: " cssClass="field-title" />
<TextView text="{{ product.description }}" cssClass="field" row="1" col="1" />
</GridLayout>
<GridLayout cols="*" rows="auto, auto">
<Label text="Prijs per eenheid: " cssClass="field-title"/>
<TextField text="{{ product.unitPrice }}" cssClass="field" row="1" col="1"/>
</GridLayout>
<GridLayout cols="*" rows="auto, auto">
<Label text="eenheid: " col="0" cssClass="field-title"/>
<TextField text="{{ product.unit.unit }}" cssClass="field" row="1" col="1" editable="false" tap="unitTap"/>
</GridLayout>
<GridLayout cols="*" rows="auto, auto">
<Label text="btw percentage: " cssClass="field-title"/>
<TextField text="{{ product.vatPercentage.vatPercentage }}" cssClass="field" row="1" col="1" tap="showModal"/>
</GridLayout>
</StackLayout>
Das klingt wirklich wie ein Fehler - können Sie ein Problem in [GitHub] (https://github.com/NativeScript/NativeScript/issues) so öffnen dass das Team es genauer unter die Lupe nehmen kann. –
Alexander, ich hatte in den letzten Tagen nicht die Zeit dazu, aber ich habe es gerade getan. – ProGig