2012-10-22 13 views
14

使用Knockout工作新項目時,基本文檔似乎沒有解釋如下的情況。使用下面的attr調用;一個不正確的HREF產生: 「API /度/函數c(){如果(0」組合字符串文字和對象值時出現Knockout.js attr錯誤

<a data-bind="attr: { href: '/api/degrees/' + fieldId }"> 

儘管下面產生fieldId值正確

<a data-bind="attr: { href: fieldId }"> 

現以唯一的方式成功結合的基本URL字符串和JS對象值使用淘汰賽計算值?

在此先感謝您的幫助。

回答

18

嘗試:

<a data-bind="attr: { href: '/api/degrees/' + fieldId() }"> 
+0

真棒,快速回答和工作!爲什麼添加字符串時需要調用括號而不是單獨使用? – Mebourne

+3

我沒有足夠強大的KO和javascript背景來解釋,但我相信它與KO如何在JavaScript中解析和執行表達式有關。在你的第一種情況下,你正在做字符串連接,所以javascript隱式地調用了fieldId上的「toString」,它是一個函數,它返回函數的內容。在你的第二個例子中,我相信knockout會試圖調用fieldId作爲函數,以便在綁定之前獲取值。 我假設fieldId的類型是ko.observable。 – Alan

+5

@ user1742487:要回答你的問題,所有可觀察的都是函數。你通常不得不「召喚」它來獲得它的價值。然而,在一個綁定中,淘汰賽可以直接讀取一個可觀察對象,所以當它全部由它自己完成時,不需要調用它。但是當你有一個更復雜的表達式(比如字符串連接)時,你必須調用它,以便連接存儲在可觀察對象中的值,而不是可觀察對象本身。 –

相關問題