针对isdirty功能的Knockout绑定

时间:2014-09-22 14:06:43

标签: javascript knockout.js

我必须检查视图是否有任何变化。这里我无法将模板与模型绑定。

我的视图页面的代码是: -

<section>
    <ul class="breadcrumb" role="menu">
        <li><i class="fa fa-home"></i> <a href="#">Home</a><span class="divider"></span></li>
        <li class="active"><i class="fa fa-office"></i> <span>Company</span></li>
    </ul>
    <div class="row">
       <div class="col-lg-12" data-bind="event:{change:dirty}">
            <div data-bind="tabs:{widgetData:widgetData}"></div>
        </div>
    </div>
</section>

我编写的用于检查的部分代码是: -

var vm = {
        activate: activate,
        canDeactivate: canDeactivate,       
        dirty: function (root) {
            var _initialized;
            var result = ko.computed(function () {
                if (!_initialized) {
                    ko.toJS(root);
                    _initialized = true;
                    return false;
                }
                return true;
            });

            return result;
        },
    };

 function canDeactivate() {
        if (vm.dirty == true) {
            var app = require('durandal/app');
            return app.showMessage('Are you sure you want to leave this page?', 'Navigate', ['Yes', 'No']);
        } else {
            return true;
        }
    }

1 个答案:

答案 0 :(得分:1)

判断视图是否已更改的方法是使用事件绑定。我不完全确定你的代码中你要检查哪个元素但你可以轻松地将更改绑定放在元素上,以便在元素更改时调用dirty

data-bind="event: {change: dirty}

每次元素值改变时都会调用脏函数

ko事件绑定文档位于here