问题描述
我正在使用caphList开发tizen Web应用程序。我正在使用ajax从api中获取数据,并在获得响应后通过以下代码在caphlist中进行了设置:
// Reset container before set data
$('#sub_cate_list').html("");
$('#sub_cate_list').caphList({
items : items,template: 'sub-cate-template',containerClass : 'list',direction: 'vertical',initialItemIndex: 0,onFocusItemView: function(context) {
// Assign inner category index
SUB_CAT_INDEX = {rowIndex: context.rowIndex,itemIndex: context.itemIndex};
}
});
在caphlist中设置数据之前,我正在使用jQuery的 html() 方法重置容器,并且运行良好,但是当我单击另一个类别以加载相同的ui时但是新的类别数据然后会集中在不起作用上。
设置焦点的代码:
$.caph.focus.activate();
let controllerProvider = $.caph.focus.controllerProvider.getInstance();
controllerProvider.setDepth(0);
controllerProvider.focus(0);
Caphlist模板:
<div class="shows_container_list" id="sub_cate_list"></div> <!-- container element -->
<!-- template view -->
<script id="sub-cate-template" type="text/template">
<div class="home_listBox item" focusable data-focusable-initial-focus="<%=(index===0)?true:false%>" data-focusable-depth="1">
<div class="shows_innerBox">
<div class="shows_Box" data-uri="<%= item.uri %>">
<img src="<%= item.image %>">
<div class="shows_textlist text_bright"><%= item.text %></div>
</div>
</div>
</div>
</script>
因此,我认为破坏航海家的方法将起作用,但我不知道该如何使用。所以有人可以建议如何使用销毁方法吗?
我想做什么:
我有两个类别:“今天”和“明天”,当我第一次单击“今天”或“明天”时,下一个屏幕上的焦点工作正常,但是回到类别屏幕后,如果我单击“今天”和“明天”,然后在下一个屏幕上关注无法正常工作。
如果有人认为我的做法不正确,请提出建议。
谢谢
解决方法
在模板的第一个div中添加一个data-focusable-name
属性:
<div class="home_listbox item" focusable data-focusable-initial-focus="<%=(index===0)?true:false%>" data-focusable-depth="1" data-focusable-name="katty<%= index %>">
然后调用这些方法将重点放在您想要的项目上
controllerProvider.setDepth(1); // not 0. Actually you might not need to set the depth.
controllerProvider.focus("katty7");
或(使用jQuery)
controllerProvider.setDepth(1); // not 0. Actually you might not need to set the depth.
controllerProvider.focus($(".home_listbox-item:eq(7)"));
编辑:
尝试以下方法:
this.subCateList = undefined;
$("#sub_cate_list_container").empty(); // Clear the container
this.subCateList = $('#sub_cate_list').caphList({
items : items,template: 'sub-cate-template',containerClass : 'list',direction: 'vertical',initialItemIndex: 0,onFocusItemView: function(context) {
// Assign inner category index
SUB_CAT_INDEX = {rowIndex: context.rowIndex,itemIndex: context.itemIndex};
}
});
如果只想更新列表,而不是重新创建它,则可以使用以下方法。我不确定您是否需要同时使用更新方法。
this.subCateList.reload();
this.subCateList.update();