从ListView中删除项目时,更改不会反映在ListView中,也不会在NativeScript中更新。我使用Firebase作为后端,但数据在数据库中正确更新。
任何人都请帮助我。我在下面提供我的代码文件。拼接后,我得到了正确的结果,但列表视图不会与该数据绑定。
list.model.ts
function delete(id) {
return firebase.remove("/Groceries/" + id + "");
};
list.ts
var items = [];
var itemsObject = new observableModule.fromObject({
groceryList: items
});
export function deleteValues(args) {
var item = args.view.bindingContext;
var page = <pages.Page>args.object;
deleteItems(item.key)
.then(
() => {
items.splice(items.indexOf(item), 1);
page.bindingContext = itemsObject;
}
).catch(
() => {
alert("error");
}
)
};
list.xml
<Page loaded="loaded">
<GridLayout rows="auto, *" columns="2*, *">
<TextField id="grocery" text="{{ grocery }}" hint="Enter a grocery
item" row="0" col="0" />
<Button text="Add" tap="addGrocery" row="0" col="1" />
<ListView id="groceryList" items="{{ groceryList }}" row="1"
colSpan="2">
<ListView.itemTemplate>
<GridLayout columns="*, auto">
<Label text="{{ name }}" horizontalAlignment="left"
verticalAlignment="center"/>
<Image src="~/images/delete.png" col="1"
tap="deleteValues" />
</GridLayout>
</ListView.itemTemplate>
</ListView>
</GridLayout>
答案 0 :(得分:1)
您仍然可以将ListView的itemList定义为ObservableArray,并使用内置的splice
function删除目标项:
所以在你的代码中:
var items = new Observable.ObservableArray<any>();
items.splice(index, 1);
基本上,它与你所做的一样,但如果你使用的是ObservableArray而不是普通的数组,它应该更新