2016-01-11 192 views
0

計算性能考慮以下模型:從服務器檢索

public class ProfileViewModel 
{ 
    public string LanguageCode { get; set; } 
    public ProfileLocalizationViewModel CurrentLocalization { get; set; } 
    public List<ProfileLocalizationViewModel> Localizations { get; set; } 
} 

我想實現的是有CurrentLocalization從基礎上LanguageCodeLocalizations自動檢索。我知道ko.computed()函數,但我打算將ProfileViewModel的列表傳遞給客戶端,因此將CurrentLocalization設置爲在淘汰賽中手動計算的屬性,我不認爲這是一個選項。是否有可能實現我想要的?如果不是,我怎麼能實現類似的東西?任何幫助不勝感激。

+0

你不能在C#中這樣做,而不是默認的'get;',有你自己的'get {}'實現。 – ramiramilu

+0

後來我試圖做到這一點,但它並沒有被作爲一個計算屬性在淘汰賽中被映射... –

回答

0

如果你想它,你可能要像服務器端:

public class ProfileViewModel 
{ 
    public string LanguageCode { get; set; } 
    public ProfileLocalizationViewModel CurrentLocalization 
    { 
     get{ 
     return Localizations.FirstOrDefault(p=>p.LanguageCode == this.LanguageCode); //assuming that ProfileLocalizationViewModel has LanguageCode property 
     } 
    } 
    public List<ProfileLocalizationViewModel> Localizations { get; set; } 
} 

它無關淘汰賽計算性能。這是一個服務器端代碼。

+0

對不起,我可能不夠明確。我想要的是'CurrentLocalization'可以根據客戶端上的'LanguageCode'從'Localizations'自動檢索。 –

0

假如你有LocalizationsLanguageCode一個視圖模型,你可以創建一個計算觀察到的是這樣的:

var currentLocalization = ko.computed(function() { 
    var code = LanguageCode(); // unwrap observable 
    var currentLocalizacion 
     = localizations.find(function(loc) {return loc.langCode === code});; 
    return currentLocalization 
}; 

在此實現我使用find,這是不是在所有瀏覽器。如果您需要支持沒有此方法的瀏覽器,則可以使用類似lodash_.find)的庫或任何替代實現,例如for循環來在數組元素內進行搜索。