javascript - knockout 脏标志代码不起作用

标签 javascript knockout.js

刚刚开始 knockout ,需要实现页面更改警告。以下是代码片段。如果页面上发生任何更改,我只需要弹出一个警报作为警告。

function parseViewModel() {

    var viewModel = JSON.parse(getState());

    viewModel.checking = ko.observable(false);
    viewModel.Slider = new ko.observable(100 - viewModel.Slider);
    viewModel.CausalsList = buildHierarchy(viewModel.Causals);
    viewModel.Causals["-1"] = "Total Marketing Budget";
    viewModel.GeographiesList = ko.observableArray(gl);
    viewModel.Geographies["0"] = "All Geographies";
    viewModel.ProductsList = ko.observableArray(pl);
    viewModel.Products["0"] = "All Products";
    .
    .
    .

    return viewModel;
}

function bindModel() {

    model = parseViewModel();

    ko.dirtyFlag = function (root, isInitiallyDirty) {
        var result = function () { },
        _initialState = ko.observable(ko.toJSON(root)),
        _isInitiallyDirty = ko.observable(isInitiallyDirty);

        result.isDirty = ko.computed(function () {
            return _isInitiallyDirty() || _initialState() !== ko.toJSON(root);
        });

        result.reset = function () {
            _initialState(ko.toJSON(root));
            _isInitiallyDirty(false);
        };

        return result;
    };


    model.dirtyFlag = new ko.dirtyFlag(model);
    model.isDirty.subscribe(function () {
        alert("Page change warning!");
    });

    ko.applyBindings(model, $('#const').get(0));
    ko.applyBindings(model, $('#buttonDiv').get(0));
}

引用了 Ryan Niemeyer 的博客。不幸的是,它不再起作用了。请问有什么见解吗?

最佳答案

根据您的情况,您可能希望订阅 model.dirtyFlag.isDirty 而不是 model.isDirty

关于javascript - knockout 脏标志代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892389/

相关文章:

javascript - 居中嵌入视频内容

javascript - knockout : cascade write to multiple observables if no value yet?

javascript - 在 knockout 中枚举 observableArray 到字符串?

knockout.js - Knockout.js 中的自定义 bindingHandlers 库

knockout.js - knockout 映射对象响应

javascript - 使用 promises 递归检索分页数据

JavaScript 就地修改 Number 对象(包装器) - 向下转型

javascript - 无法移动使用 super 的方法

javascript - 侧边栏不工作不知道为什么

javascript - knockout js foreach 与展开/折叠的绑定(bind)