NativeScript ListView itemTap不会清空项目

时间:2015-11-07 23:54:46

标签: javascript android ios xml nativescript

作为我正在构建的NativeScript iOS / Android应用程序的一部分,我需要:
1.搜索项目列表
2.选择一个搜索结果
3.选择一个后,清除搜索结果

但它不起作用。奇怪的是,相同的clearItems函数在附加到被清除的SearchBar时起作用,当点击ListView中的项目时它只是不起作用。

以下是相关代码:

XML

<Page>
    <AbsoluteLayout loaded="layoutLoaded">
        <SearchBar hint="Search for your opponent" id="search" submit="performSearch" />
        <ListView id="itemList" items="{{ itemList }}" visibility="{{ listVisible ? 'visible' : 'collapsed' }}">
            <ListView.itemTemplate>
                <WrapLayout>
                    <Image cssClass="itemImage" src="{{ image }}" />
                    <Label cssClass="itemLabel" text="{{ niceName }}" />
                </WrapLayout>
            </ListView.itemTemplate>
        </ListView>
    </AbsoluteLayout>
</Page>

的JavaScript

function clearItems(thisLayout){
    thisLayout.bindingContext.itemList = [];
    thisLayout.bindingContext.listVisible = false;
}

exports.layoutLoaded = function(args){

    var thisLayout = args.object

    thisLayout.bindingContext = {
        itemList: [],
        listVisible: false
    };

    var searchBar = view.getViewById(thisLayout, 'search');

    searchBar.on(searchBarModule.SearchBar.clearEvent, function(args) {
        clearItems(args.object.parent);
    });

    var itemListWrap = view.getViewById(thisLayout, 'itemList');

    itemListWrap.on('itemTap', function(args){
        var page = args.object.parent;
        clearItems(page);
    });

}

非常感谢能够提供帮助的任何人。我假设列表项清除它自己的父列表有一些更复杂的东西。

1 个答案:

答案 0 :(得分:0)

Emil的建议最终为我解决了。

我改为使用可观察对象,这意味着当点击列表项时,我可以成功清空数组:

function clearItems(viewModel){
    while(viewModel.itemList.length > 0){
        viewModel.itemList.pop();
    }
    viewModel.set('listVisible', false);
}

var viewModel = new observableModule.Observable({
    listVisible: false,
    itemList: new observableArrayModule.ObservableArray([])
});

exports.layoutLoaded = function(args){

    var thisLayout = args.object

    thisLayout.bindingContext = viewModel;

    var searchBar = view.getViewById(thisLayout, 'search');

    searchBar.on(searchBarModule.SearchBar.clearEvent, function(args) {
        clearItems(viewModel);
    });

    var itemListWrap = view.getViewById(thisLayout, 'itemList');

    itemListWrap.on('itemTap', function(args){
        clearItems(viewModel);
    });

}