2012-10-22 14 views
14

Knockoutを使用して新しいプロジェクトを作成すると、基本ドキュメントで以下のようなケースが説明されていないようです。以下のattr呼び出しを使用します。誤っHREFが生成される: "API /度/関数C(){(0の場合"文字列リテラルとオブジェクト値を組み合わせたときのKnockout.js attrエラー

<a data-bind="attr: { href: '/api/degrees/' + 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"を呼び出します。 2番目の例では、ノックアウトがfieldIdを関数として呼び出そうとしているので、バインディングの前に値を取得しようとしています。 fieldIdの型がko.observableであると仮定しています。 – Alan

+5

@ user1742487:質問に答えるために、すべてのオブザーバブルは関数です。あなたは通常、その価値を得るためにそれを「呼び出す」必要があります。しかし、バインディング内では、ノックアウトは観測可能なものを直接読み取ることができるので、それだけではそれを呼び出す必要はありません。しかし、より複雑な式(文字列の連結など)を持つ瞬間には、それを呼び出す必要があります。そのため、オブザーバブル自体にではなく、オブザーバブルに格納されている値を連結します。 –

関連する問題