ko.mapping.fromJS(rawJSON)导致了一个未定义的对象

时间:2013-03-11 22:45:32

标签: knockout.js

在ko.mapping.fromJS行之后,找出导致未定义viewModel的原因的最佳方法是什么?

rawJSON在chrome js对象资源管理器

中看起来很好
    var viewModel = ko.mapping.fromJS(rawJSON);
        viewModel = decorateViewModel(viewModel);
        ko.applyBindings(viewModel);

在chrome中查看:

rawJSON: Object
   Companies: Array[1]
   CompaniesFollowing: Array[0]
   DisplayName: null
   DateCreated: "2013-03-11T21:50:21.9"
   __proto__: Object
viewModel: undefined



  function decorateViewModel(viewModel){
            viewModel.CompaniesFollowing().forEach(function(self) {
                self.isFollowing = ko.observable(true);
                self.toggleIsFollowing = function () {
                    if(self.isFollowing()){
                        unFollowCompany()}
                    else{
                        followCompany();
                    }
                    self.isFollowing(!self.isFollowing());//reverse it so the user can see the button text change
                };
                self.followButtonText = ko.computed(function () {
                    return self.isFollowing() ? "Unfollow" : "Follow";
                });
                self.styleClass = ko.computed(function () {
                    return self.isFollowing() ? "radius button" : "radius secondary button";
                });
            });

rawJSON:

  var rawJSON = { "Companies" : [ { "DateCreated" : "2013-03-11T21:53:31.123",
     "Description" : "eee",
     "EquityOffered" : 3.0,
     "FollowingUsers" : null,
     "Id" : 1,
     "InvestmentFound" : 0.0,
     "InvestmentSought" : 3333.0,
     "LogoFileName" : "4ED564E6-CDBB-4045-8E55-9581B7FA13E0.jpg",
     "Name" : "Model Adapt",
     "SocialDetails" : null
   } ],
  "CompaniesFollowing" : [  ],
  "DateCreated" : "2013-03-11T21:50:21.9",
  "DateUpdated" : "2013-03-11T21:50:21.9",
  "DisplayName" : null,
  "FullName" : null,
  "HomeAddress" : null,
  "Id" : 1,
  "Investor" : { "AvailableFunds" : 0.0,
      "DateCreated" : "2013-03-11T22:30:07.273",
      "DateUpdated" : "2013-03-11T22:30:07.273",
      "Description" : "kbibkb",
      "FollowingUsers" : [  ],
      "Id" : 1,
      "Interests" : "bukb",
      "LogoFileName" : null,
      "Name" : "giu",
      "Skills" : "kbku",
      "SocialDetails" : null
    },
  "InvestorsFollowing" : [ { "AvailableFunds" : 0.0,
        "DateCreated" : "2013-03-11T22:30:07.273",
        "DateUpdated" : "2013-03-11T22:30:07.273",
        "Description" : "kbibkb",
        "FollowingUsers" : [  ],
        "Id" : 1,
        "Interests" : "bukb",
        "LogoFileName" : null,
        "Name" : "giu",
        "Skills" : "kbku",
        "SocialDetails" : null
      } ],
  "LogoFileName" : null,
  "MiniAbout" : null,
  "UserName" : "Master_"
}

1 个答案:

答案 0 :(得分:1)

肯定是var viewModel = ko.mapping.fromJS(rawJSON);导致viewmodel为null,或者是viewModel = decorateViewModel(viewModel);,因为看起来你的decorateViewModel方法没有返回视图模型,这会导致它为null在该行处理完毕后。