2013-09-01 2 views
7

私はスタイルバインディングに関する質問があります。スタイルバインディングテキスト全体を生成することは可能ですか?プロパティと価値の部分は一緒になっているのですか?たとえば :property + valueを指定してknockoutjsスタイルのバインディングを追加できますか?

function ViewModel() { 
    this.fontSize = ko.observable(12); 

    this.fontSizeCSS = ko.computed(function() { 
     return "font-size: " + " " + this.fontSize() + "px"; 
    }, this); 

} 

// Activates knockout.js 
ko.applyBindings(new ViewModel()); 

簡単な方法は、次のように実行することです:

<div data-bind="style: { fontSize: fontSize() + 'px'}"> 
    <p>Lorem ipsum</p> 
</div> 

は、それはそれを、この(私はそれが動作しませんでした、試してみました)のような方法を行うことは可能です

<div data-bind="style: { fontSizeCSS() }"> 
    <p>Lorem ipsum</p> 
</div> 

はいの場合、どうですか?そうでない場合は、どうしてですか? HTML形式の要素にテキストをバインドすることはできますが、私はそれをやや似たようにすることができますか、私は何を提案していますか? ありがとう!

+0

あなたは最後の例のバインディングに()を入れてはいけません。 – deltree

+0

()を外しても問題は解決しません。 – Zsombi

+0

は間違いありませんが、間違ったコードを入力すると役立たないことがあります。 – deltree

答えて

12

style bindingの主なパラメータはstringではありませんが、

あなたは、プロパティ名は名前のスタイルに対応しており、値はあなたが望むスタイル値に対応するJavaScriptのオブジェクトを渡す必要があります応募する。

だからあなたfontSizeCSSオブジェクトではなく、文字列を返す必要が計算され、それが正常に動作します:

this.fontSizeCSS = ko.computed(function() { 
     return {"fontSize": this.fontSize() + "px"}; 
}, this); 

デモJSFiddleを。

+0

よくできてしまった、私は完全にそれを逃した – deltree

+0

ありがとう!このように動作しますが、唯一の問題はfont-sizeの代わりにfontSizeを置かなければならないことです。あなたはあなたの答えでそれを修正できますか? – Zsombi

+0

@Zsombiどのブラウザをお使いですか? IE10と最新のChromeの両方のデモでうまくいきます... – nemesv

関連する問題