QML 5.10 StackView 界面管理之 ------ 重复压入问题

在使用 QML 做手机APP开发的过程中,发现 StackView 常常会因为手机点击过快而将同一个界面压入了两次的情况,通过 depth 来解决问题通常由于界面压入的复杂性,一个界面可能会因为不同的操作而处于不同的 depth ,从而导致界面判断 depth 过于复杂和繁冗,如此,StackView 提供了 find() 方法,可以查找到对应的界面,函数原型如下:


Item find(callback, behavior)

Search for a specific item inside the stack. The callback function is called for each item in the stack (with the item and index as arguments) until the callback function returns true. The return value is the item found. For example:

stackView.find(function(item, index) {
        return item.isTheOne
})

该函数没有函数名,该函数会从栈顶一直查找到栈低,如果没有找到的话,如果中途找到了,会结束该函数在接下来的界面中运行。该 function 如果返回 true ,就代表找到了对应的界面,find() 函数就会返回这个界面元素,可以通过 var 变量接收这个界面元素,并通过该变量访问这个界面内定义的数据。

在界面管理的应用中,我们通过在每一个界面上定义一个唯一的 pageId ,通过查找确认 StackView 中是否存在该 Id ,判断该界面是否已经被压入,这样就可以避免重复压入的问题。

(去除掉 find() 函数出问题的情况,该方法在一定情况下优于直接比较 depth)

 

遇到了,记一下,希望有用~

posted @ 2018-04-25 12:17  Mtr1994  阅读(3541)  评论(0编辑  收藏  举报