[SailfishDevel] Remove all pages from stack before specified page

Matthew Vogt matthew.vogt at jolla.com
Sun Sep 11 04:23:39 UTC 2016


Hi Oleg.

I'm sorry, the PageStack simply does not support this model.  It can only work like a stack, where pages are added and removed from one end of the list, and the existing pages on the stack are unmodifiable while there are other pages above them in the stack.

In this case, 'above' actually means 'having greater depth value', indicating pages added to the stack more recently.  So, if you have 5 pages on the stack and replace above the page that has (_depth == 4) only the single page with (_depth > 4) will be removed.  There is no API to remove pages lower in the stack, as this is not how a stack works.

I think your application may work better by ignoring the stack entirely.  You can use replace to transition to a new page without increasing the page stack depth, and the content of your page can be dynamically loaded, so you can maintain the logical state of the pages in an external array that you control.  Perhaps what you need is an array of instantiated Items, which can be loaded into your actual Page as required, or dropped from the array when no longer wanted.

Thanks,
Matt

________________________________
From: Devel [devel-bounces at lists.sailfishos.org] on behalf of Oleg Linkin [maledictusdemagog at gmail.com]
Sent: Saturday, September 10, 2016 2:42 PM
To: devel at lists.sailfishos.org
Subject: [SailfishDevel] Remove all pages from stack before specified page


Hello, developers



To prevent infinite page stack depth I want to cut some first pages from stack.

I have 5 pages in stack and when I click on item and begin pushing 6 page to stack I want to remove first 4 pages and as result I want to have only 5 and 6 page in stack.

But I can't do this.



I tried the next:

if (pageStack.depth === 5) {

pageStack.replaceAbove(null, pageStack.find(function(page)

{ return page._depth === 4 }), {},

PageStackAction.Immediate)

}



But in this case I got empty page which I found in find function



and the next:

if (pageStack.depth === 5) {

pageStack.pop(pageStack.find(function(page)

{ return page._depth === 4 }),

PageStackAction.Immediate)

}

Documentation says: "If a page object is specified, all pages above the specified page are removed;" but in result it remove only page which found in pageStack.find function



How I can do this? Thx!



--

*Sincerely, Oleg Linkin.*





*Jabber: magog at gentoo.ru <magog at gentoo.ru> Skype: lord_baskervil Тел.: +375-(29)-5539994*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.sailfishos.org/pipermail/devel/attachments/20160911/d6f32129/attachment.html>


More information about the Devel mailing list