ListView не обновляется после удаления

При удалении элемента из ListView изменения не отражаются в ListView и не обновляются в NativeScript. Я использую Firebase в качестве серверной части, но данные в базе данных корректно обновляются.

Кто-нибудь, пожалуйста, помогите мне. Я предоставляю свои файлы кода ниже. После объединения я получил правильный результат, но представление списка не будет связано с этими данными.

список.модель.тс

function delete(id) {  
return firebase.remove("/Groceries/" + id + "");
};

список.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");
    }
    )
    };

список.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>


person Khushi    schedule 30.09.2016    source источник
comment
Чтобы принудительно обновить ListView, вы можете использовать метод refresh. - docs.nativescript.org/api-reference/classes/< /а>   -  person Nikolay Tsonev    schedule 30.09.2016


Ответы (1)


Вы по-прежнему можете определить itemList для ListView как ObservableArray и использовать встроенный splice функция для удаления целевого элемента:

Итак, в вашем коде:

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

По сути, это то же самое, что вы сделали, но оно должно обновляться, если вы используете ObservableArray вместо обычного массива.

person Dean Le    schedule 30.09.2016
comment
это работает. но удаляется только первый элемент. при удалении второго списка элементов не будет обновляться. - person Khushi; 30.09.2016