在 Titanium Appcelerator 的 SplitWindow (Master/Detail) 的 NavigationWindow 中检测后退按钮点击
Detect back button click in NavigationWindow in a SplitWindow (Master/Detail) on Titanium Appcelerator
我有一个选项卡式应用程序(iOS - 使用 Alloy 框架),其中一个选项卡用于显示产品。在这个选项卡中,我有一个使用 SplitWindow 的主/细节设置。
在 Master 中,我有一个使用 table 视图的简单类别浏览器。这是我的看法 xml:
<Alloy>
<Tab title="Products" icon="Nav_Products.png" id="tabProducts" backgroundColor="white">
<SplitWindow backgroundColor="white" showMasterInPortrait="true">
<!-- Categories -->
<NavigationWindow id="categoriesWindow">
<Window title="Categories">
<TableView id="categories" separatorStyle="Titanium.UI.iPhone.TableViewSeparatorStyle.SINGLE_LINE" />
</Window>
</NavigationWindow>
<!-- Products -->
<NavigationWindow>
<Window id="resultsWindow" title="Select a category to browse it's products" backgroundColor="white">
<RightNavButton>
<Button right="0" id="basketSubTotal" />
</RightNavButton>
<View left="10" top="10" right="10" bottom="10">
<TableView rowHeight="160" id="tblResults" allowsSelection="false" />
</View>
</Window>
</NavigationWindow>
</SplitWindow>
</Tab>
</Alloy>
当应用加载时,它会像这样呈现根类别:
如果我单击类别 "HAIR",它会加载 "HAIR" 中的子类别,并且会出现标题为 "Categories" 的 "Back" 按钮,如下所示:
因此,当我单击“<类别”(即后退按钮)时,它会返回到根类别列表。一切正常。
我想做的是,检测后退按钮何时被点击,并处理这个动作。
因为目前,如果我深入到一个类别的 3 级,一切正常。但是,当我开始 "back" 时,之前加载的产品仍保留在结果 table 中。当您退回导航时,我希望能够基本上重新加载结果。为了实现这一点,我需要检测导航 window 中的后退按钮何时被单击。我怎样才能做到这一点?
您可以监听按下后退按钮后触发的 'close' 事件。每个导航 window 控制器中的示例:
var controller = Alloy.createController().getView();
controller.addEventListener('close', function closed(e) {
controller.removeEventListener('close',closed);
[...]
});
$.navwindow.openWindow(controller); // .open(controller)
或者,您可以收听自定义事件,它将在您的下一个 window/controller
时触发
喜欢...您的 table 控制器正在等待监听事件,例如 'need_refresh'
Ti.App.addEventListener('need_reload', function() {
loadNewContent();
});
并且您可以使用 fireEvent
以编程方式触发某些逻辑
Ti.App.fireEvent('need_reload');
然后,当用户按下后退按钮时,您的 table 已经刷新。
希望对你有所帮助:)
我有一个选项卡式应用程序(iOS - 使用 Alloy 框架),其中一个选项卡用于显示产品。在这个选项卡中,我有一个使用 SplitWindow 的主/细节设置。
在 Master 中,我有一个使用 table 视图的简单类别浏览器。这是我的看法 xml:
<Alloy>
<Tab title="Products" icon="Nav_Products.png" id="tabProducts" backgroundColor="white">
<SplitWindow backgroundColor="white" showMasterInPortrait="true">
<!-- Categories -->
<NavigationWindow id="categoriesWindow">
<Window title="Categories">
<TableView id="categories" separatorStyle="Titanium.UI.iPhone.TableViewSeparatorStyle.SINGLE_LINE" />
</Window>
</NavigationWindow>
<!-- Products -->
<NavigationWindow>
<Window id="resultsWindow" title="Select a category to browse it's products" backgroundColor="white">
<RightNavButton>
<Button right="0" id="basketSubTotal" />
</RightNavButton>
<View left="10" top="10" right="10" bottom="10">
<TableView rowHeight="160" id="tblResults" allowsSelection="false" />
</View>
</Window>
</NavigationWindow>
</SplitWindow>
</Tab>
</Alloy>
当应用加载时,它会像这样呈现根类别:
如果我单击类别 "HAIR",它会加载 "HAIR" 中的子类别,并且会出现标题为 "Categories" 的 "Back" 按钮,如下所示:
因此,当我单击“<类别”(即后退按钮)时,它会返回到根类别列表。一切正常。
我想做的是,检测后退按钮何时被点击,并处理这个动作。
因为目前,如果我深入到一个类别的 3 级,一切正常。但是,当我开始 "back" 时,之前加载的产品仍保留在结果 table 中。当您退回导航时,我希望能够基本上重新加载结果。为了实现这一点,我需要检测导航 window 中的后退按钮何时被单击。我怎样才能做到这一点?
您可以监听按下后退按钮后触发的 'close' 事件。每个导航 window 控制器中的示例:
var controller = Alloy.createController().getView();
controller.addEventListener('close', function closed(e) {
controller.removeEventListener('close',closed);
[...]
});
$.navwindow.openWindow(controller); // .open(controller)
或者,您可以收听自定义事件,它将在您的下一个 window/controller
时触发喜欢...您的 table 控制器正在等待监听事件,例如 'need_refresh'
Ti.App.addEventListener('need_reload', function() {
loadNewContent();
});
并且您可以使用 fireEvent
Ti.App.fireEvent('need_reload');
然后,当用户按下后退按钮时,您的 table 已经刷新。
希望对你有所帮助:)