【问题标题】:knockout help getting external data淘汰赛帮助获取外部数据
【发布时间】:2015-09-16 17:23:40
【问题描述】:

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

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

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) 返回未定义

为什么会这样?

【问题讨论】:

    标签: javascript jquery knockout.js


    【解决方案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);
    });
    

    【讨论】:

    • 实际上,在可用的饭菜中,在数组形成时可以调用它是没有意义的。那么我将如何更新它以从该文件中提取 self.seats = ko.observableArray([ new SeatReservation("Steve", "Standard (sandwich)", "34.95" ) ])
    • 我不确定我是否关注?您现在是否想通过 ajax 调用而不是可用餐点来更新预留座位?
    • 是的,我会作为答案发布,因为它在这个框中太乱了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2013-04-10
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多