【发布时间】:2016-12-07 20:00:24
【问题描述】:
我正在尝试使用 OnsenUI 2 的 pushPage() 功能(截至目前为 rc15)。除了 OnsenUI,我还在使用 jQuery 3。
这是我的功能,点击某些元素时应该推送一个页面:
$(".tile_handler").on("click", ".imalink", function () {
var link = $(this).data().href;
if(link != null){
document.querySelector("#myNavigator").pushPage(link, { animation: "slide-ios" });
}
})
当我第一次推送页面时,它工作正常。我使用 iOS 后退按钮返回。然后我再次点击它,我得到了这个错误(随着我重复这个过程越来越多):
[index.js:450] 未捕获(承诺)pushPage 已经在运行。
这是另一个应该加载拆分页面的函数:
$(".splitter_item").click(function () {
var address = $(this).data('address');
$('#content')[0].load(address).then(menu.close.bind($('#menu')[0]));
})
当我通过拆分器在两个页面之间切换时,它开始抛出这个(每次我在页面之间切换时都会抛出更多)
[undefined:1] Uncaught (in promise) Splitter 端被锁定。
我假设正在发生的事情是我加载了一个页面,然后离开它,当我再次访问它时,它再次加载了该页面。然而,这似乎不是 OnsenUI 示例中显示的行为,例如 as this:
document.addEventListener('init', function(event) {
var page = event.target;
if (page.id === 'page1') {
page.querySelector('#push-button').onclick = function() {
document.querySelector('#myNavigator').pushPage('page2.html', {data: {title: 'Page 2'}});
};
} else if (page.id === 'page2') {
page.querySelector('ons-toolbar .center').innerHTML = page.data.title;
}
});
popPage() 函数应该删除以前加载的页面并防止这种情况发生。但是参考文献没有使用它,所以我认为我做错了什么。但我不知道是什么。
更新:
我设法在 CodePen 中重现了这两个问题。 Here 是拆分器错误,here 是 pushPage() 之一。 pushPage() 似乎是我的函数的一个问题,因为它每次单击它时都会添加一个 pushPage() 请求,但不知道为什么。
这两个错误似乎只发生在 Ripple 模拟器中(通过 VS2015)。我似乎无法在 Android Emulator 中重现它们(但 $(".tile_handler").on("click", ".imalink", function () { 代码无论如何都会多次触发错误)。我正在进一步测试。
【问题讨论】:
-
您可以一遍又一遍地推送同一页面而不会出现问题。我做了一个快速的 codepen:codepen.io/anon/pen/NALzWZ 证明了这一点。后退按钮确实执行了 popPage() 但如您所见,我一遍又一遍地将相同的 page2.html 模板推送到导航堆栈而没有问题。通常,当我收到或看到该错误时,会发生其他事情。
-
这种情况只发生在 iOS 上还是在浏览器上?如果你使用
fade-ios动画也会发生这种情况吗? -
我的装备有点不足,所以我现在只有模拟器可以使用。这发生在 Android 和 iOS 上的 Ripple Emulator 中。我添加了一个重现错误的 CodePen。
标签: javascript jquery cordova onsen-ui onsen-ui2