2015-03-31 69 views
0

我已經與代碼試圖讓JSON與winJS列表視圖綁定搞亂。例如:不能使用'in'運算符在[{「$ id」:「1」,「Distance」:0.083516275210499508,「Jo ....」)中搜索'0'。 ........WinJS需要幫助的結合JSON響應的ListView

需要一些幫助,感謝

 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

有一對夫婦的事情發生在你這裏的代碼。

首先,從您的REST調用request.response是一個JSON ,不是數組因爲需要初始化新WinJS.Binding.L IST。你看到的異常來自傳遞一個字符串。所以,你需要使用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="{    
    itemTemplate: select('.smallListIconTextTemplate'), 
    selectionMode: 'none', 
    tapBehavior: 'none', 
    layout: { type: WinJS.UI.ListLayout } 
    }" 

這應該幫助你前進。

P.S.只是一個建議,張貼有關的異常問題時,它總是有益的,其中在代碼中引發異常準確確定。這將更快,更好的反應得到你,否則我只好把你的代碼放到一個項目找到這些信息。

+0

謝謝,我已經解決了您在上面提到了這兩個問題,但第二個問題我解決了使用頁面上的承諾。「args.detail.setPromise(WinJS.Promise.then(NULL,」 https://msdn.microsoft。 COM/EN-US /庫/窗/應用/ dn301954.aspx – user971374 2015-04-03 01:29:43