1

こんにちは、私は Durandal 、ノックアウト、および renderjs を使用して SPA アプリケーションを構築しています。あるページから別のページに移動するときに問題が見つかったようです。

これは私の現在のモデルがどのように見えるかです:

define(['services/logger', 'services/dataService', 'durandal/plugins/router'],
function (logger, dataService, router) {
    var allModulesObservableCollection = ko.observableArray();
    var isInitialized = false;
    var activeSaIdParameter = "";

    var vm = {
        //bindable
        title: ko.observable(''),
        dataLoading: ko.observable(false),
        hasErrors: ko.observable(false),
        errorMessage: ko.observable(''),

        courseName: ko.observable(''),
        allModules: allModulesObservableCollection,

        //operations
        refreshData: refreshData,
        showActiveModules: showActiveModules,
        activate: activate,
    };

    return vm;

    function activate(context) {
        logger.log('All Modules View Activated', null, 'allModules', true);
        if (!isInitialized) {
            activeSaIdParameter = context.activeSaId;
            isInitialized = true;
            fetchModulesData(context.activeSaId);
            return fetchHeaderData(context.activeSaId);
        } else {
            if (context.activeSaId != activeSaIdParameter) {
                activeSaIdParameter = context.activeSaId;
                fetchModulesData(context.activeSaId);
                return fetchHeaderData(context.activeSaId);
            }
        }
    }


    function fetchModulesData(activeSaId) {
        vm.dataLoading(true);
        vm.hasErrors(false);
        return dataService.getAllModulesInCourse(activeSaId)
            .then(fetchModulesCompleted)
            .fail(fetchDataFailed);

        function fetchModulesCompleted(data) {
            allModulesObservableCollection(data);
            debugger;
            vm.dataLoading(false);
        }
    }

    function showActiveModules() {
        var url = '#/activeModules/' + activeSaIdParameter;
        router.navigateTo(url);
    }   
});

初めてデータが正しく表示され、すべて正常に動作しますが、別のページに移動してからこのページに戻ろうとすると、ブラウザが JavaScript コードを完全に無視するようになります。

ShowActiveModules() は、ユーザーを兄弟ページに移動させる責任があります。

デバッグ中に、このページに戻った後、ブラウザーがこのコードを実行しなくなったことに気付きました。データを取得して表示するには、ページを完全に更新する必要があります。

誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

1

RequireJS はファイルを一度だけ読み取るため、このファイルを再度実行することはありません。

ただし、一見すると、「アクティブ化」関数が再度呼び出されるはずです。「アクティブ化」機能だけにブレークポイントを設定してみましたか?

于 2013-04-25T10:40:25.113 に答える