2016-09-30 100 views
0

从ListView中删除项目时,这些更改将不会反映在ListView中,并且不会在NativeScript中更新。我使用Firebase作为后端,但数据在数据库中正确更新。ListView在删除后不会更新

任何人都请帮助我。我在下面提供我的代码文件。拼接后,我得到了正确的结果,但列表视图不会与该数据绑定。

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

要强制ListView更新,您可以使用'refresh'方法。 - https://docs.nativescript.org/api-reference/classes/_ui_list_view_.listview.html#refresh –

回答

1

您仍然可以定义为itemList中ListView的作为ObservableArray并使用th E中的内置splicefunction删除目标项目:

因此,在你的代码:

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

基本上,这是一样的,你做了什么,但它应该如果你正在使用ObservableArray更新,而不是正常数组

+0

这有效。但只有第一项被删除。而删除第二个项目列表将不会更新。 – Khushi