2015-05-29 70 views
0

我有一個骨幹集合並基於集合中模型的屬性,我遍歷集合並在UI中顯示它。以優雅的方式迭代基於模型屬性的骨幹集合

的邏輯是,如果模型具有財產isNewCartrue,我會先顯示他們都在UI,隨後分離,然後我會告訴其財產isNewCarfalse所有車型。

this.cars.forEach(function (car, index) 
{ 
    if(car.isNewCar()){ //IF A NEW CAR 
     //some logic. 
     //Attach current view in DOM with this model's properties   
    } 
}); 

//Here, Attach some separator in DOM 

this.cars.forEach(function (car, index) 
{ 
    if(!car.isNewCar()){ //IF 'NOT' A NEW CAR 
     //some logic. 
     //Attach current view in DOM with this model's properties   
    } 
}); 

這看起來雜亂無章,我知道它不是那麼優雅,有人可以提出一個更好的方式與一些優雅的解決方案,以取代上面的代碼?

回答

1

我建議有一個共同呈現邏輯來呈現在一個單獨的功能項說renderCars()和過濾收集如下

function filterCars(isNew) { 
    var isNewCar = isNew 
    return function(car) { 
     return (car.isNewCar() === isNewCar); 
    } 
} 

renderCars (this.cars.filter(filterCars(true))); 
renderCars (this.cars.filter(filterCars(false))); 

所有我們上面做的是創建一個輔助函數filterCars這需要一個布爾值來決定我們是否需要新車。這個幫助函數返回一個用於過濾汽車的函數。

骨幹過濾器使用下劃線過濾器,該過濾器返回過濾結果的新數組。我將它傳遞給通用渲染函數。

我沒有測試這個,但這應該有助於清除一些重複的代碼。

+0

in'filterCars'函數'car'變量是如何被訪問的?這是不對的。 – ScrapCode

+0

是。返回功能將用作過濾方法的功能,該方法將在汽車中傳遞。 (Filter API)[http://underscorejs.org/#filter] – Praveen

+0

這裏是我創建的jsfiddle來解釋上面的代碼..嘗試取消註釋代碼中的最後一行並查看結果:[jsfiddle](https: //jsfiddle.net/vkuruvada/r64qgaxt/7/) – Praveen