Hi,
I have been struggling to get the code below to work and need some advice.
Currently I am testing out the Kendo MVVM and am relatively new to javascript so my apologies upfront if I am missing out on something obvious.
My current goal is to update my viewModel with a new JSON related object after a double-click row event occurs on my grid.
The difficulty that I am having is to assign a value to my viewModel outside of the initial declaration. I want to call a different function and for it have access to the viewModel to update it.
Now this next part is the area that I am having a problem trying to get right.
I get an error here and for each of the examples below this because it says viewModel is not defined. I am just not sure how to reference it for this function?
I have been struggling to get the code below to work and need some advice.
Currently I am testing out the Kendo MVVM and am relatively new to javascript so my apologies upfront if I am missing out on something obvious.
My current goal is to update my viewModel with a new JSON related object after a double-click row event occurs on my grid.
The difficulty that I am having is to assign a value to my viewModel outside of the initial declaration. I want to call a different function and for it have access to the viewModel to update it.
01.Main starting point for Javascript file02. 03.$(document).ready(function () {04. console.log("Loading");05. var viewModel = new TradeViewModel();06. LoadControls(); 07. kendo.bind($("#view"), viewModel);08.});09. 10. 11.var TradeViewModel = function() {12. var self = this;13. 14. var dateNow = getFormattedDate();15. self.viewModel = kendo.observable({16. search: {17. DateFrom: dateNow,18. DateTo: dateNow,19. TradeId: null,20. TradeStatus: "All",21. IsVoice: true,22. IsLive: false,23. BuyCompany: null,24. SellCompany: null25. },26. tradeDetailsSearch: {27. LiveTradeId: 0,28. EngineId: 0,29. ServerId: 030. },31. tradeData: "SomeData"32. });33. self.viewModel.bind("change", function (e) {34. // This function works and is fine.35. TradeSearch(param1,param2);36. console.log(e.field);37. console.log("Event Binding finished");38.}39. 40.var RefreshGrid = function (apiQuery) {41. 42.var ds = new kendo.data.DataSource({43. transport: {44. read: {45. url: apiQuery,46. dataType: "json"47. }48. }49. });50. 51. $("#grid").kendoGrid({52. // standard binding to grid etc... this works fine53. });54. 55. // This registers a double-click listener, in my case I get the row details back.56. $(".k-grid-content").dblclick(DoubleClickAction);57.};Now this next part is the area that I am having a problem trying to get right.
1.function DoubleClickAction() {2. var grid = $("#grid").data("kendoGrid");3. var selectedRow = grid.dataItem(grid.select());4. console.log("You have double clicked on " + selectedRow.LiveTradeID);5. 6. // And now the different approaches I have taken to set the viewModel data.I get an error here and for each of the examples below this because it says viewModel is not defined. I am just not sure how to reference it for this function?
1.//... same function code as above.2. 3. // I get an error here that says : Uncaught ReferenceError: viewModel is not defined4. var testTradeData = viewModel.get("tradeData");5. console.log(testTradeData);6.};01.//... same function code as above. 02. 03.// Get JSON data based on Id04. 05. $.getJSON(apiQuery)06. // Handle success event.07. .done(function (jsonData) {08. if (jsonData.isEmptyObject)09. console.log("No data received");10. else {11. console.log("JSON data: " + jsonData);12. 13. var mappedTradeArray = $.map($.makeArray(jsonData), function(tradeData) 14. {15. return new GetTradeDetails(tradeData);16. });17. // I can see this correctly works and gets the data.18. console.log(mappedTradeArray); 19. 20. // ERROR : I get the same:21. // 'Uncaught ReferenceError: viewModel is not defined error' message22. viewModel.tradeData =mappedTradeArray[0];23. 24. // ERROR: I can also try to set it from the documentation 25. // that I have read on this website but get the same error :26. viewModel.set("tradeData",mappedTradeArray[0]);27. };28. });29.