我一直在搞乱代码试图让json与winJS listview绑定。
目前我收到错误异常:无法使用'in'运算符在[{“$ id”:“1”,“距离”中搜索“0”:0.083516275210499508,“Jo ..... .......
需要一些帮助,谢谢
WinJS.xhr({
url: "http://api.secondyearvisajob.com.au/api/jobs/GetNearActiveJobs",
type: "POST",
responseType: "",
data: JSON.stringify({ LocationId: 23555, kms: 10 }),
headers: { "content-type": "application/json" }
}).done(
function completed(request) {
alert(request) //[object: Object]
alert(JSON.stringify(request.response)) // my data
alert(JSON.parse(request.response)) //[object: Object],[object: Object]
alert(request.statusText)
WinJS.Namespace.define("Sample.ListView", { data: new WinJS.Binding.List(request.response) });
},
function error(request) {
alert(request)
}
);
WinJS.UI.processAll()
<div class="smallListIconTextTemplate" data-win-control="WinJS.Binding.Template" style="display: none">
<div class="smallListIconTextItem">
<div class="smallListIconTextItem-Detail">
<h4 data-win-bind="textContent: Distance"></h4>
</div>
</div>
</div>
<div id="listView"
class="win-selectionstylefilled"
data-win-control="WinJS.UI.ListView"
data-win-options="{
itemDataSource: itemDataSource :Sample.ListView.data.dataSource,
itemTemplate: select('.smallListIconTextTemplate'),
selectionMode: 'none',
tapBehavior: 'none',
layout: { type: WinJS.UI.ListLayout }
}">
</div>
答案 0 :(得分:0)
您的代码中发生了一些事情。
首先,来自REST调用的request.response是一个JSON 字符串,而不是初始化新WinJS.Binding.List所需的数组。你看到的例外来自传递一个字符串。所以你需要使用JSON.parse(request.response)来获取该数组:
var arr = JSON.parse(request.response);
var list = new WinJS.Binding.List(arr);
接下来,因为WinJS.xhr是一个异步API,所以可能是WinJS.UI.processAll在您获得响应之前以及甚至在定义Sample.ListView命名空间之前尝试初始化ListView。要更正此问题,请从HTML中省略itemDataSource属性,并直接在代码中设置该属性。也就是说,从上面继续:
var listview = document.getElementById("listView");
listview.winControl.itemDataSource = list.dataSource;
HTML中的data-win-options属性如下所示:
data-win-options="{
itemTemplate: select('.smallListIconTextTemplate'),
selectionMode: 'none',
tapBehavior: 'none',
layout: { type: WinJS.UI.ListLayout }
}"
这应该会帮助你前进。
P.S。只是一个建议,当发布有关异常的问题时,始终有助于确定引发异常的确切位置。这将使您获得更快更好的响应,否则我必须将您的代码放入项目中以查找该信息。