2013-06-18 41 views
7

我在我的頁面上有一個viewModel,它包含某些設備當前狀態概覽的數據。到目前爲止,除了一個問題外,一切都很好:我需要根據viewModel中的另一個值設置div元素的title屬性。Knockout.js:有條件地綁定div的標題屬性

我知道,你基本上可以設置(div標籤的數據綁定屬性中)這樣的稱號屬性:

attr: { title: 'Some title' } 

使用上面的說法,「有些題」被設置爲提示時,徘徊div。 我還可以設置這樣的:

attr: { title: ConnectState.Value() } 

它輸出我目前的視圖模型數據的正確值(一個整數值),因此視圖模型被正確填充。

現在我需要改變這類似的東西:

attr: { 
    title: { 
    'Text 1': ConnectState.Value() == 0, 
    'Text 2': ConnectState.Value() == 1, 
    'Text 3': ConnectState.Value() == 2, 
    'Text 4': ConnectState.Value() == 3 
    } 
} 

上面的例子只會給「的翻譯:」作爲標題(RESP作爲提示。)。我該如何解決這個問題? 非常感謝!

+1

你爲什麼不寫'ATTR是:{title: '文本' +(ConnectState.Value()+ 1)}'或者你的實際文字比你的例子更復雜? – nemesv

+0

不幸的是,它是。 ConnectState的值是一個轉化爲「連接」,「斷開連接」,「連接」等的枚舉。 – Robert

回答

9

在您的視圖模型中定義ko.computed。

self.ConnectTitle = ko.computed(function() { 
    return 'Text ' + (self.ConnectState.Value() + 1).toString(); 
}); 

然後: -

attr: { title: ConnectTitle } 

當你的綁定。如果你的文本只是一個簡單的例子,你可以用適合你需要的東西替換計算函數的內容。

+0

感謝您的建議。我需要設置的title屬性存在於一個數據綁定的表格行中:所以我必須將這個ConnectTitle函數應用到viewModels「Rows」集合中的每個項目,這是動態,取決於頁面。我無法弄清楚如何實現這一點。 – Robert

+1

你的每一行都用一個對象表示,對嗎?發佈您的Javascript視圖模型,我們來看看。 –

+0

以下是典型viewModel數據的Json轉儲:http://jsfiddle.net/AMLk7/ – Robert

2

您可以使用三元運算符,這樣的事情:

attr: { 
    title: ConnectState.Value() == 0 ? 'Text 1' : 
     ConnectState.Value() == 1 ? 'Text 2' : 
     ConnectState.Value() == 2 ? 'Text 3' : 
     'Text 4' 
}