http://stackoverflow.com/questions/42964923/knockout-js-calling-a-property-from-outside-the-view-model-always-null

by jlspake

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.1/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>
<div>
  <button id="newRoom" type="button" data-bind="click: addRoom">New Room</button>
</div>

JavaScript

var jsonData = {
  Rooms: [
    'room 1', 'room 2'
  ]
};

var ViewModel = function(data) {
  var self = this;

  ko.mapping.fromJS(data, {}, self);

  this.addRoom = function() {
    self.Rooms.push(new Room());
  };

  this.addImageUrl = function(roomId, imageUrl) {
    debugger;

    var room = ko.utils.arrayFirst(self.Rooms(), function(roomId) {
      return room.RoomID === roomId;
    });
  };
}

var Room = function() {
  var self = this;
}

var viewModel = new ViewModel(@Html.Raw(jsonData));
ko.applyBindings(viewModel);

setTimeout(function(){
    var file = { url: 'localhost' };
    var roomId = $("#hdnRoomId").val();
    viewModel.addImageUrl(roomId, file.url);
}, 1000)