删除后ListView不会更新

时间:2016-09-30 07:44:05

标签: firebase firebase-realtime-database nativescript typescript1.8

从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>

1 个答案:

答案 0 :(得分:1)

您仍然可以将ListView的itemList定义为ObservableArray,并使用内置的splice function删除目标项:

所以在你的代码中:

var items = new Observable.ObservableArray<any>();
items.splice(index, 1);

基本上,它与你所做的一样,但如果你使用的是ObservableArray而不是普通的数组,它应该更新