如何清除从先前访问视图填充的observableArray的内容

Chr*_*ris 41 knockout-2.0 knockout.js single-page-application

我有一个单页应用程序,使用knockout进行数据绑定.在我的单页应用程序CAApproval.html视图有一个名为在视图模型代码AllCertificates的observeablearray.它在页面上填充得很好.当您通过点击页面navigation.html部分的链接导航远离视图,然后返回到CAApproval页面上,从previouse参观值仍然在AllCertificates observableArray,因此显示在CAApproval视图.

我需要清除AllCertificates内容observablearray每次用户返回到使用该observablearray的CAApproval页面,这样,如果一个用户离开页面,回来时,observablearray的内容是无效的,因此显示在没有数据屏幕.以下是我的viewmodel代码的亮点 -

define(['services/logger', 'durandal/system', 'durandal/plugins/router', 'services/CertificateDataService','controls/Lucas'],

       function(logger, system, router, CertificateDataService) {
        var allCertificates = ko.observableArray([]);

    var activate = function () {
            // go get local data, if we have it
            return SelectAllCerts(),SelectMyCerts(), GetCertificateDetails(), GetDDABankNums();
            };
        var vm = {
            activate: activate,
            allCertificates: allCertificates,
    SelectAllCerts: SelectAllCerts

        });

    return vm;

    function SelectAllCerts() {
                return CertificateDataService.getallCertificates(allCertificates);
        }
    });
Run Code Online (Sandbox Code Playgroud)

如何清除observablearray的每次内容的用户进入到该页面(而不是在页面中浏览时,仅当用户来自一个单独的页面清除observablearray)的页面?

Max*_*xim 75

淘汰赛observableArray还有一些有趣的方法.致电removeAll清除所有物品.
看官方网站可观察阵列手册.

self.mycertificates = ko.observableArray(['C1', 'C2']);  
self.mycertificates.removeAll();
Run Code Online (Sandbox Code Playgroud)

  • 对于这个或PW Kad的答案有什么性能优势吗? (4认同)

PW *_*Kad 42

只需将它设置为allCertificates([])激活函数中的nothing(),每次加载视图模型时调用它 -

function(logger, system, router, CertificateDataService) {
    var allCertificates = ko.observableArray();

var activate = function () {
    allCertificates([]);
    // go get local data, if we have it
    return SelectAllCerts(),SelectMyCerts(), GetCertificateDetails(), GetDDABankNums();
};

var vm = {
    activate: activate,
    allCertificates: allCertificates,
    SelectAllCerts: SelectAllCerts
});
Run Code Online (Sandbox Code Playgroud)