2013-07-26 101 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