1

我正在編寫一個測試程序以從Rotten Tomatoes API中提取數據,並希望知道在使用映射插件後循環播放對象屬性的最佳方法。數據非常簡單,正在通過jquery ajax進行檢索。循環播放對象屬性

下面是數據的一小部分:

"ratings": { 
    "critics_rating": "Certified Fresh", 
    "critics_score": 99, 
    "audience_rating": "Upright", 
    "audience_score": 91 
} 

這是一個較大的映射的一部分,我在執行Ajax回調像這樣的映射:

self.moviedetail = ko.mapping.fromJS(data); 

我知道我可以做以下這就是我想優化:

<div data-bind-"with: moviedetail"> 
<ul data-bind="with: ratings"> 
    <li>Critics Rating: <span data-bind="text: critics_rating"></span></li> 
    <li>Critics Score: <span>data-bind="critics_score"</span></li> 
    etc 
</ul> 
</div> 

我還沒有確定如何可以循環每個評級都以某種數據不可知的方式像這樣顯示它們,而不用檢查每一個。使用下劃線我可以遍歷屬性並獲取它們的值,但不知道如何在淘汰賽中實現相同的功能。

最終的結果我在尋找的是:

<ul> 
    <li>critics_rating: Certified Fresh</li> 
    <li>critics_score: 99</li> 
    .... 
</ul> 

注:每它肯定會工作的一個答案,我可以預處理這樣的數據,但我想看看是否有一種方法可以在視圖上進行。

if (data.ratings!=='undefined') { 
    self.ratings.removeAll(); 
    for(var prop in data.ratings) { 
    if(data.ratings.hasOwnProperty(prop)) { 
     self.ratings.push({name: prop, value: data.ratings[prop]});       
    } 
    } 
} 

回答

3

我不認爲你可以在缺省情況下使用敲除來做到這一點。

你可以處理的數據陣列把輸入數據的結構,你可以在一個通用的方式結合,如:

"ratings" : { 
    [ "name": "critics_rating", "value": "Certified Fresh" ], 
    [ "name": "critics_score", "value": 99 ], 
    ... 
} 

然後使用HTML像

<ul data-bind="foreach: ratings"> 
    <li> 
     <span data-bind="text: name"></span>: 
     <span data-bind="text: value"></span> 
    </li> 
</ul> 
+0

感謝您的回答和是沿着我所做的解決這個問題的線..我只是希望有一個簡單的方法來獲得屬性列表,而無需預處理數據。 – lucuma