gpt4 book ai didi

javascript - Backbone - 防止在删除 View 后延迟执行

转载 作者:行者123 更新时间:2023-11-30 15:42:45 25 4
gpt4 key购买 nike

我有一个主视图,它有一个盒子,里面有可以切换的 subview

成功获取 ajax 调用后,主视图上会显示“成功”div。

我面临的问题是,当我在 subview 之间切换时,前一个 View 的提取中的延迟 promise 仍然会被执行并显示“成功”div。

这是我的代码:

this.model.fetch().done(function() {
$('#success').show();
});

onChangeSubview: function() {
this.subview.unbind();
this.subview.remove();
}

这个问题abort-ajax-requests-using-jquery说你可以存储指向延迟的指针并通过像这样调用 abort() 来停止它:

var fetchXhr = this.model.fetch().done(function() {
$('#success').show();
});
onChangeSubview: function() {
fetchXhr.abort();
}

我对每个 subview 进行了多次提取,有些在一定时间间隔内重复,这意味着我必须存储每个提取请求并循环遍历它们并在每个 subview 上调用中止。

是否有更好的方法来阻止延迟函数的执行?例如:某种检查 subview 是否已被删除,或取消绑定(bind)所有延迟 promise 的功能?

最佳答案

中止不一定是可取的,因为您可能希望 View 即使在隐藏时也能继续刷新(确认您当前已取消绑定(bind)/删除)。

您当然可以通过采用导致“#success”元素有条件地显示的模式来避免中止的需要,例如通过使用方法操纵 $('#success') 对象仅当特定 subview (或其容器)可见(或任何适合的标准)时,返回一个显示 #success 元素的函数。

// in some suitable outer context
var $success = $('#success');
$success.showConditional = function($container) {
var $self = $(this);
return function() {
if($container.is(':visible')) {
$self.show();
}
}
};

...

$subviewContainer = $("someSelector"); //or maybe the container is already a property of this or this.model?
this.model.fetch().done($success.showConditional($subviewContainer));

在所有抓取都采用该模式后,#success 元素将不会显示隐藏或删除的 subview 。

无论如何,这是原则。您可能需要调整细节以适合您的整体模式。

关于javascript - Backbone - 防止在删除 View 后延迟执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40545583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com