Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
I am busy creating a currency Module for my web app, I am using Yahoo Finance API to return the currency conversion rate of 2 currencies that I have defined in my local DB. I get the JSON data fine from the API, I just want to Bind the JSON data that I have received from the Finance API to my existing Viewmodel so that I can use it.
 
Here is my code:
 
 var currency = function (data) {
            var self = this;
            self.CurrencyFrom = ko.observable(data.CurrencyFrom);
            self.CurrencyTo = ko.observable(data.CurrencyTo);
            self.ConversionRate = ko.observable(); // I WANT TO BIND MY RATE THAT IS RETURNED FROM YAHOO FINANCE API (parseExchangeRate Function) HERE
        }
 
        var CurrencyModel = function (Currencies) {
            var self = this;
            self.Currencies = ko.observableArray(Currencies);
 
            self.AddCurrency = function () {
                self.Currencies.push({
                    CurrencyFrom: "",
                    CurrencyTo: "",
                    ConversionRate: ""
                });
            };
 
            self.RemoveCurrency = function (Currency) {
                self.Currencies.remove(Currency);
            };
 
            self.Save = function (Form) {
                alert("Could Now Save: " + ko.utils.stringifyJson(self.Currencies));
            };
 
            $.ajax({
                url: "CurrencyConfiguration.aspx/GetConfiguredCurrencies",
                // Current Page, Method  
                data: '{}',
                // parameter map as JSON  
                type: "POST",
                // data has to be POSTed  
                contentType: "application/json; charset=utf-8",
                // posting JSON content      
                dataType: "JSON",
                // type of data is JSON (must be upper case!)  
                timeout: 10000,
                // AJAX timeout  
                success: function (Result) {
                    var MappedCurrencies =
                  $.map(Result.d,
           function (item) {
               getRate(item.CurrencyFrom, item.CurrencyTo);
               return new currency(item);
           }
           );
                    self.Currencies(MappedCurrencies);
 
                },
                error: function (xhr, status) {
                    alert(status + " - " + xhr.responseText);
                }
            });
        };
 
        //3rd Party JSON result from Yahoo Finance API
        function getRate(from, to) {
            var script = document.createElement('script');
            script.setAttribute('src', "http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D" + from + to + "%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json&callback=parseExchangeRate");
            document.body.appendChild(script);
        }
 
         //THIS IS THE PRIMARY FUNCTION TO GET RATE FROM JSON
        function parseExchangeRate(YahooData) {
            var rate = YahooData.query.results.row.rate;
            //I WANT TO BIND THIS RATE TO MY VIEW MODEL
        }
 
        $(document).ready(function () {
            var VM = new CurrencyModel();
            ko.applyBindings(VM);
            $('[rel=tooltip]').tooltip();
        })
My JSON Data Returned from my App:
{"d":[{"__type":"Finance.Tracntrace.Members_Only.DAL.DataModel.Currency.CurrencyConfigurationDM","CurrencyFrom":"ZAR","CurrencyTo":"USD","Rate":null},{"__type":"Finance.Tracntrace.Members_Only.DAL.DataModel.Currency.CurrencyConfigurationDM","CurrencyFrom":"USD","CurrencyTo":"ZAR","Rate":null}]}
The JSON returned from parseExchangeRate Function (Yahoo Query Result):
parseExchangeRate({"query":{"count":1,"created":"2013-01-18T06:46:41Z","lang":"en-US","results":{"row":{"rate":"0.1129","name":"ZAR to USD"}}}});
Posted 17-Jan-13 20:52pm
dr_fu501

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 240
1 Kamal Rocks 184
2 BillWoodruff 173
3 Sergey Alexandrovich Kryukov 170
4 PIEBALDconsult 160
0 OriginalGriff 5,695
1 DamithSL 4,506
2 Maciej Los 4,007
3 Kornfeld Eliyahu Peter 3,480
4 Sergey Alexandrovich Kryukov 3,180


Advertise | Privacy | Mobile
Web03 | 2.8.141216.1 | Last Updated 18 Jan 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100