2012-08-31 90 views
1

编辑看起来我现在从服务器上加载它。如果有人看到这个问题,很想听听他们的消息。基因敲除

有一些问题让挖空映射插件工作。我可以用静态数据解决这个问题,请参阅http://jsfiddle.net/RH9wQ/

当我尝试从服务器加载数据时,它似乎不起作用。以下是我正在使用的裸露骨骼代码。 jsfiddle中的数据是从我的服务器返回的确切数据。我错过了一些完全明显的东西?

我正在做的是加载在不同的药物基于点击的阿尔法按钮。因此,点击“y”并获得以y开头的药物列表,点击“z”并获得以z开头的药物列表。当按钮被点击/数据加载时,我想用我的viewModel数据替换来自服务器的内容。数据看起来很好(8个数组元素和count = 8),但是注意viewModel的控制台,preferredDrugs和count是不同的,任何人都知道这是为什么?

$(function() { 
    $('.load').click(function() { 
     var $letter = $(this).attr('value'); 

     //show spinner 
     $('#loading').show(); 

     //load in drug list data 
     $.getJSON('/PreferredDrugList/service/preferredDrugs/' + $letter, function(data) { 
      //hide spinner 
      $('#loading').hide(); 

      console.log(data); 
      //create observable properties for each of the properties on data 
      ko.mapping.fromJS(data, viewModel); 
      console.log(viewModel); 

     }); 
    }); 

});//end ondomready 

//default data 
var data = { 
    preferredDrugs: [], 
    count: 0 
}; 

var viewModel = ko.mapping.fromJS(data); 

ko.applyBindings(viewModel); 

回答

5

更新时使用ko.mapping现有视图模型,你也可以尝试:

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

的..instead ..

ko.mapping.fromJS(data, viewModel); 

另外,还要注意对的jsfiddle控制台页面,数据看起来很好(8阵列 元素和计数= 8),但请注意viewModel的控制台, 首选药物和次数不同,任何人都知道这是为什么?

是,原来的首选药物是一种正常的阵列,同时在新的优选药物是一种可观察到的阵列如果您尝试直接访问它,则可观察数组将看起来像一个空数组。然而,可观察到的是功能,需要被视为如此。

所以......

console.log(myViewModel.preferredDrugs); 

...返回空数组,而...

console.log(myViewModel.preferredDrugs()); 

...返回实际数组。