WinJS需要帮助将json响应绑定到listview

时间:2015-03-31 02:32:08

标签: json listview winjs

我一直在搞乱代码试图让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>

1 个答案:

答案 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。只是一个建议,当发布有关异常的问题时,始终有助于确定引发异常的确切位置。这将使您获得更快更好的响应,否则我必须将您的代码放入项目中以查找该信息。