作为我正在构建的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);
});
}
非常感谢能够提供帮助的任何人。我假设列表项清除它自己的父列表有一些更复杂的东西。
答案 0 :(得分:0)
我改为使用可观察对象,这意味着当点击列表项时,我可以成功清空数组:
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);
});
}