Knockout extensions for igDataChart

Implementing knockout extensions for igDataChart

HTML

<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js"></script>
<script src="http://cdn-na.infragistics.com/jquery/20122/latest/js/infragistics.loader.js"></script>
<div id="chart" data-bind="igDataChartDataSource: data"></div>
<div id="innerZoom"></div>
<ul data-bind="foreach: data">
    <li>
        label: <span data-bind="text: label"></span> value: <input type="text" data-bind="value: editValue"></input>
        value2: <input type="text" data-bind="value: editValue2"></input>
    </li>
</ul>

<input type="button" id="addItem" value="addItem"></input>
<input type="button" id="removeItem" value="removeItem"></input>
<input type="button" id="moveItem" value="moveItem"></input>
<input type="button" id="changeData" value="changeData"></input>

JavaScript

$.ig.loader({
    scriptPath: "http://cdn-na.infragistics.com/jquery/20122/latest/js/",
    cssPath: "http://cdn-na.infragistics.com/jquery/20122/latest/css/"
});

$.ig.loader("igDataChart.Category", function () {
    var data, data2, vm, updateBindingHelper;
    
    updateBindingHelper = function(element, targetName, type, data) {
           var value = data, 
               valueUnwrapped = ko.utils.unwrapObservable(data),
               currValue,
               currProxy,
               makeProxy,
               proxies;               
            
            proxies = $(element).data("koDataChartProxies-" + targetName);
            
            if (!proxies) {
                proxies = {};
                proxies.itemProxies = [];
                proxies.arrayProxy = [];
                proxies.cachedArray = [];
                $(element).data("koDataChartProxies-" + targetName, proxies);
            }
        
            if (proxies.dataSourceInstance == value) {
                 return;   
            }
            proxies.dataSourceInstance = value;
        
            if (proxies.arrayHandler) {
                proxies.arrayHandler.dispose();
                proxies.beforeHandler.dispose();
            }
        
            makeProxy = function(item) {
                var proxy = {}, key, newInstance;
                
                proxy.instance = {};
                proxy.instance.owner = proxy;
                proxy.item = ko.computed(function() {
                    newInstance = ko.toJS(item);  
                    for (key in newInstance) {
                        if (newInstance.hasOwnProperty(key)) {
                            proxy.instance[key] = newInstance[key];
                        }
                    }
                    return proxy.instance;
                });
                proxy.handler = null;
                proxy.dispose = function() {
                    proxy.handler.dispose();   
                };
               ...