刚开始淘汰赛,需要实施页面更改警告。以下是代码段。如果在页面上进行任何更改,我只需要弹出一个警告作为警告。
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));
}
Rean Ryan Niemeyer的博客。不幸的是,它不再起作用了。有什么见解吗?
答案 0 :(得分:3)
您希望在您的情况下订阅model.dirtyFlag.isDirty
而不是model.isDirty
。
答案 1 :(得分:0)
一种方法是使用customBinding。我也不熟悉KO,但这可能是你感兴趣的东西。
基本上你要做的是: -
ko.bindingHandlers.myFunction = {
update : function(){
//do something
}
}
http://knockoutjs.com/documentation/custom-bindings.html
使用以下方法在您的元素上调用它: -
<h1 data-bind="myFunction:{}"></h1>
此外,还有一个jsfiddle来展示它是如何工作的。 (如果更改名字的值并将焦点从中移出,则会触发customBinding。)
不确定这是否是最好的做法。