2012-07-24 83 views
1

无法将我的JSON数据加载到ko.observableArray中,并且不知道为什么。将JSON映射到observableArray的错误

$(document).ready(function(){ 
    function Region(uid, name) { 
     this.uid = ko.observable(uid); 
     this.name = ko.observable(name); 
    } 

    function CompanyViewModel() { 
     this.regions = ko.observableArray([]); 
    } 

    ko.applyBindings(new CompanyViewModel()); 

    // Init. 
    $.getJSON('/regions/', 
     function(data){ 
      if(data.status == 'ok') 
      { 
       var mappedData = ko.utils.arrayMap(data.regions, function(item) { 
        return new Region(item.uid, item.name); 
       }); 
       CompanyViewModel.regions(mappedData); 
      } 
     } 
    ); 
}); 

调试器说:遗漏的类型错误:对象功能CompanyViewModel()...有没有方法“区”

我是新来的美人,肯定有一些明显的错误,但我不知道在哪里。

回答

3

没有测试它,但应该给你明白我的意思的想法,这是我会怎么做:

$(document).ready(function(){ 
    var Region = function(uid, name) { 
     this.uid = ko.observable(uid); 
     this.name = ko.observable(name); 
    } 

    var CompanyViewModel = function() { 
     this.regions = ko.observableArray([]); 
    } 

    var model = new CompanyViewModel(); 
    ko.applyBindings(model); 

    // Init. 
    $.getJSON('/regions/', 
     function(data){ 
      if(data.status == 'ok') 
      { 
       var mappedData = ko.utils.arrayMap(data.regions, function(item) { 
        return new Region(item.uid, item.name); 
       }); 
       model.regions(mappedData); 
      } 
     } 
    ); 
}); 
+0

谢谢! 我希望现在我明白我的错误。我创建了“匿名”viewmodel对象,并试图从模型定义本身而不是从对象调用方法,对吧? – vandroid 2012-07-24 12:22:55

+0

对,你没有在模型的实例上工作。顺便说一句,如果你不打算改变一个属性(比如说一个ID),那么没有理由把它变成可观察的。 – 2012-07-24 12:25:07