Advertisement
Guest User

Knockout + MVC sample

a guest
Feb 11th, 2016
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASP 2.95 KB | None | 0 0
  1. <div>
  2.     <a href="#" data-bind="click: $root.addDriver">Add Driver</a>
  3.     <a href="#" data-bind="click: $root.update">Update</a>
  4. </div>
  5.  
  6. <ul data-bind="foreach: Drivers, visible: Drivers().length > 0">
  7.     <ul>
  8.         <div>
  9.             <input data-bind="value: FullName"/>
  10.             <a href="#" data-bind="click: $parent.removeDriver">Delete</a>
  11.             <a href="#" data-bind="click: addCar">Add Car</a>
  12.         </div>
  13.         <ul class="no-cars" data-bind="visible: Cars().length == 0">No cars D:</ul>
  14.         <ul data-bind="foreach: Cars, visible: Cars().length > 0">
  15.             <li>
  16.                 <div>
  17.                     <a href="#" data-bind="click: $parent.removeCar">Delete</a>
  18.                     <label>Car Name:</label> <input data-bind="value: Name"/>
  19.                     <label>Car Code:</label> <input data-bind="value: Code"/>
  20.                 </div>
  21.             </li>
  22.         </ul>
  23.     </ul>
  24. </ul>
  25.  
  26. @section scripts{
  27.     <script src="../../Scripts/knockout-3.4.0.js"></script>
  28.  
  29.     <script>
  30.         $(function() {
  31.             function CarModel(data) {
  32.                 var self = this;
  33.  
  34.                 self.Code = ko.observable(data.Code);
  35.                 self.Name = ko.observable(data.Name);
  36.             }
  37.  
  38.             function DriverModel(data) {
  39.                 var self = this;
  40.  
  41.                 self.addCar = function () {
  42.                     self.Cars.push(new CarModel({ Name: 'Tank', Code: '__' }));
  43.                 };
  44.  
  45.                 self.removeCar = function (car) {
  46.                     self.Cars.remove(car);
  47.                 };
  48.  
  49.                 self.Cars = ko.observableArray(data.Cars.map(function(car) { return new CarModel(car); }));
  50.                 self.FullName = ko.observable(data.FullName);
  51.             }
  52.  
  53.             function DriversViewModel() {
  54.                 var self = this;
  55.  
  56.                 self.Drivers = ko.observableArray([]);
  57.  
  58.                 self.addDriver = function() {
  59.                     self.Drivers.push(new DriverModel({ FullName: 'Mr. Noname', Cars: [] }));
  60.                 };
  61.  
  62.                 self.removeDriver = function(driver) {
  63.                     self.Drivers.remove(driver);
  64.                 };
  65.  
  66.                 self.update = function() {
  67.                     $.ajax("/Home/PostDriversModel", {
  68.                         data: ko.toJSON({ Drivers: self.Drivers }),
  69.                         type: "post", contentType: "application/json",
  70.                         success: function () { alert('Success!'); }
  71.                     });
  72.                 }
  73.  
  74.                 $.getJSON('/Home/GetDriversModel', function (data) {
  75.                     var drivers = data.Drivers.map(function (driver) { return new DriverModel(driver); });
  76.                     drivers.push(new DriverModel({ Cars: [], FullName: 'Mr Nocars' }));
  77.                     self.Drivers(drivers);
  78.                 });
  79.             }
  80.  
  81.             ko.applyBindings(new DriversViewModel());
  82.         });
  83.     </script>
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement