【问题标题】:Stop extend and subscribe on observable for a different page停止扩展并订阅不同页面的 observable
【发布时间】:2015-02-23 21:51:42
【问题描述】:

当移动到 SPA 中的不同页面时,我不知道这在回顾中是如何工作的。我有一个特定的页面,我总是希望收到更新通知并订阅它。然而,这个可观察的hasUpdate 被用在其他页面上,有点像一个全局变量。扩展和订阅是否会在页面更改时消失,还是我可以自己做?如果我可以自己通过将其更改为 null 或其他页面上的内容来做到这一点,你会怎么做?另外,如果我只想删除两个订阅中的一个,您可以使用订阅的 id 或其他内容来执行此操作吗?

app.viewModel.members.hasUpdate.extend({
    notify: 'always'
});

app.viewModel.members.hasUpdate.subscribe(function () {
    viewModel.modificationCheck.update();
});

【问题讨论】:

  • 您喜欢您选择“接受”的答案吗?

标签: javascript knockout.js single-page-application publish-subscribe


【解决方案1】:

订阅的dispose 方法就是您要查找的内容。 Knockout 没有“页面”或“导航”的概念,因此您必须自己处理此逻辑。最简单的情况如下所示:

hasUpdateSubscription = app.viewModel.members.hasUpdate.subscribe(function () {
    viewModel.modificationCheck.update();
});

//When you change pages

hasUpdateSubscription.dispose();

实际上,尽管您可能想要一些更有条理的方式来做到这一点。就个人而言,我建议为每个页面使用 KO ViewModel。比如:

function PageOneViewModel() {
    hasUpdateSubscription = app.viewModel.members.hasUpdate.subscribe(function () {
        viewModel.modificationCheck.update();
    });

    this.dispose = function() {
        hasUpdateSubscription.dispose();
    }
}

然后页面可以在根视图模型上使用currentPage observable 处理,因此页面更改逻辑将包括以下内容:

var newPageVM = new PageTwoViewModel();  //create a view model for page 2
var oldPageVM = app.currentPage();
app.currentPage(newPageVM); //set page 2 as the current VM
oldPageVM.dispose();  //page VM dispose function should clean up subscriptions, etc.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 2020-06-24
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多