淘汰赛有助于获取外部数据

时间:2015-06-30 04:08:18

标签: javascript jquery knockout.js

我刚刚完成了淘汰教程,现在我正在尝试从外部页面获取数据。

在教程中,他们使用以下代码:



self.seats = ko.observableArray([
        new SeatReservation("Steve", "Standard (sandwich)", "34.95" ),
        new SeatReservation("Paul", "Standard (sandwich)", "14.95" )

       ])




我想更新它以从外部文件中获取循环选项:



self.seats = ko.observableArray([
  
  $.get( "scripts/test.js", function( data ) {
  			
    
    
     $(data.data).each(function(index, result) { 
  
         new SeatReservation(result.name, result.mealName, result.price )
     })  
     
   })
     
     
  

  )]




测试结构如下:

var data = [
  {
    'mealName': 'Standard (sandwich)',
    'price': '0',
  },
  {
    'mealName': 'Main (sandwich)',
    'price': '34.95',
  }
];

我还需要做什么?

我在页面上包含了jQuery和Knockout。

我还必须从file://运行它,因为它需要在某处发送

所以我已经更新了我的代码来执行此操作



var newData = ko.utils.arrayForEach(data, function(item){
		console.log(item)
		console.log(item.firstName + " " + item.lastName + " " + item.price);
		
		return new SeatReservation(item.firstName, item.lastName, item.price);
        
		
	});
        console.log("here");    		
        console.log(newData);
	  	self.seats(newData);




控制台正在按项目的预期记录数据,但返回没有做任何事情,console.log(newData)返回undefined

为什么会这样?

1 个答案:

答案 0 :(得分:1)

你现在拥有的东西,你正在丢弃ajax调用的结果。你需要做一些像

这样的事情
$.get( "scripts/test.js", function( data ) {
  self.availableMeals = data;
});

然而,由于self.availableResults不是knockoutjs ObservableArray,因此该页面不会通过ajax调用响应来自服务器的更改。

你会想要做这样的事情。

self.seats= ko.observableArray();

$.get( "scripts/test.js", function( data ) {
  var newData = ko.utils.arrayForEach(data, function(item){
    return new SeatReservation("", item.mealName, item.price);
  });
  self.seats(newData);
});