Javascript 无法将Rest JSON数据绑定到WinJS中的ListView控件

Javascript 无法将Rest JSON数据绑定到WinJS中的ListView控件,javascript,windows-8,winjs,Javascript,Windows 8,Winjs,我面临一个问题。我试图将ListView WinJS控件绑定到返回JSON对象的RESTful服务 这是我的设计(default.html) 其内涵是每当“BTNmple”被cliekd时,都应该填充ListView。服务运行良好,我能够获得正确的数据。但当我试图 加载页面,它正在崩溃 如果我评论 "data-win-options="{itemDataSource :SourceData.itemList.dataSource, itemTemplate: select('#divDispla

我面临一个问题。我试图将ListView WinJS控件绑定到返回JSON对象的RESTful服务

这是我的设计(default.html)

其内涵是每当“BTNmple”被cliekd时,都应该填充ListView。服务运行良好,我能够获得正确的数据。但当我试图 加载页面,它正在崩溃

如果我评论

"data-win-options="{itemDataSource :SourceData.itemList.dataSource, itemTemplate: select('#divDisplayItems'),layout : {type: WinJS.UI.ListLayout}}"
至少页面正在加载

问题是什么?如何将数据绑定到ListView控件


谢谢

您正在将列表视图绑定到源数据命名空间,该命名空间在单击按钮后才可用。因此,您试图在运行时绑定到未定义的值。在激活事件之前,应在js文件顶部设置SourceData命名空间,并使用空的绑定列表创建它。类似于

WinJS.Namespace.define("SourceData", {
   itemList: new WinJS.Binding.List([]);
})
在按钮单击句柄中,您可以将项目添加到现有列表中,或者创建一个新的项目,然后从头开始分配它


你可以在上找到一些很棒的教程,特别是在第2周IIRC中。

你会崩溃,因为当你加载页面并且ListView试图绑定时,你的列表不存在。它在异步调用web服务之后才存在。要修复它,您只需提前声明WinJS.Binding.List(可能就在应用别名旁边的app.on激活行上方)。然后,当您获取数据时,只需迭代结果并将其推送到已经存在的列表中。像这样

sourceData.EmployeeDetailsResult.forEach(function(r) {
    yourList.push(r);
}

Default.js中的2个更改

第一次更改

function (response) 
{

  var sourceData = JSON.parse(response.responseText);                      
  var datalist = new WinJS.Binding.List(sourceData.EmployeeDetailsResult);

 <-- basicListView is the Name of the div where you are binding the datasource -->
  basicListView.winControl.itemDataSource = datalist.dataSource;                      

}
var app=WinJS.Application

/*插入行

WinJS.Namespace.define("SourceData", 
    {
        itemList: new WinJS.Binding.List([])
    })
*/

var activation=Windows.ApplicationModel.activation

第二次更改

function (response) 
{

  var sourceData = JSON.parse(response.responseText);                      
  var datalist = new WinJS.Binding.List(sourceData.EmployeeDetailsResult);

 <-- basicListView is the Name of the div where you are binding the datasource -->
  basicListView.winControl.itemDataSource = datalist.dataSource;                      

}
功能(响应)
{
var sourceData=JSON.parse(response.responseText);
var datalist=new WinJS.Binding.List(sourceData.EmployeeDetailsResult);
basicListView.winControl.itemDataSource=datalist.dataSource;
}
观看视频以便更好地理解

希望这有帮助

function (response) 
{

  var sourceData = JSON.parse(response.responseText);                      
  var datalist = new WinJS.Binding.List(sourceData.EmployeeDetailsResult);

 <-- basicListView is the Name of the div where you are binding the datasource -->
  basicListView.winControl.itemDataSource = datalist.dataSource;                      

}