2013-07-26 151 views
0

刚开始的淘汰赛,并需要实现换页的警告。以下是代码片段。如果页面上发生任何更改,我只需要弹出一个警告警告。淘汰赛脏标志码不工作

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的博客。不幸的是,它不再工作。有什么见解吗?

回答

3

你会想订阅model.dirtyFlag.isDirty在你的情况,而不是model.isDirty

+0

http://jsfiddle.net/arni05/M2BCb/2/ 试图在这个小提琴放在一起的东西虽然不是工作之一。你能在这里扔点灯吗? – kinjaldave

+0

我不确定你在小提琴中使用的场景,但也许这一个会帮助你进一步。 –

+0

嗨,瑞恩,我有一个表格,完成了一些数据绑定。现在在这个模型中,我必须设置一个脏标志,这个标志转换为另一个具有警告框呼叫的js方法。在小提琴中,我试图创建两个显示绑定的字段,然后在模型上设置脏标志。但是,它不起作用。 – kinjaldave

0

一种方法做的是通过使用customBinding。我不太熟悉KO,但这可能是你感兴趣的。

基本上,你会做的是: -

ko.bindingHandlers.myFunction = { 
    update : function(){ 
       //do something 
      } 
} 

http://knockoutjs.com/documentation/custom-bindings.html

,并调用它使用的元素: -

<h1 data-bind="myFunction:{}"></h1> 

此外,的jsfiddle来显示它是如何工作的。 (如果更改了名字的价值,注重了它那么customBinding被触发。)

http://jsfiddle.net/3vuTk

不知道这是最好的做法虽然。

+0

去@RP尼迈耶。他知道他在说什么比我所知道的还要多。 :d – shriek

+0

http://jsfiddle.net/arni05/M2BCb/2/ 试图在这个小提琴放在一起的东西虽然不是工作之一。你能在这里扔点灯吗? – kinjaldave