This is definitely the hardest project so far in the nanodegree.
Although using Knockout is actually pretty straight forward, the MVVM design process is what seems to be giving me the most trouble. After working through several versions of my code, I backed up and realized that I was overcomplicating the process.
Before refactoring the code, I had followed the example on the Google Maps site pretty closely, and things were working as expected. When I tried to break the code out into the MVVM pattern, I actually went TOO far, and split out things that didn't need to be, such as the mapOptions, and moving them into the Model section, rather than the ViewModel where they belonged. In the process, I was making references between the two that didn't need to be made.
After cleaning things up, I added my map markers, and presto! My map now shows all of the proper markers, and even sizes itself properly for the viewport.
Next, was adding the list of locations. This too started out with what I thought was a simple format (use the list of markers already in memory, iterate across and list the names). However, I had an issue where the names were going into memory where I could write them out to the console, but they would not display at all in the list container that was on the map.
I spent several hours trying different permutations of code, as well as researching possible reasons. Part of what made it hard to address, was the lack of errors in the console. Normally, when things can't be found, JS is real good about throwing errors. It turns out that Knockout doesn't necessarily throw an error is something is missing.
I put a post up on the Udacity forums, and Matt was kind enough to look through my work, and pointed out a major issue I was skipping over: using the "var self = this" construct in the ViewModel. The Javascript Design Pattern course specifically goes into detail about using "self", so that the code is more specific about defining scope. In setting up my ViewModel, I had failed to do this, and therefore my data binds on the HTML side were not being properly referenced.
I'm not sure exactly how I failed to add that, especially since a lot of time was spent talking about it in the course. Matt did give me a few code lines to check, and by making the proper updates, I was able to get the list to show up.
I started working on a search bar for the page, which would allow a user to filter the markers down to a specific set, based on the names of the locations. I was able to make the filter work to remove and replace items on the list, but the map markers did not change. So, another few hours, and then the map markers would disappear when the list items did. In the process of doing that, though, I ended up breaking the filtering, and though it would eliminate items, I could not get them to come back. Another hour of work did not reveal anything specific, so I am going to step back and take another look tomorrow.
With the way this has been going, I suspect I am overcomplicating something again, and maybe a fresh set of eyes on it tomorrow will show me what I am missing.