天天看點

Knockout.Js官網學習(html綁定、css綁定)

Html綁定

html綁定到DOM元素上,使得該元素顯示的HTML值為你綁定的參數。如果在你的view model裡聲明HTML标記并且render的話,那非常有用。

簡單示例

<div data-bind="html: details"></div> 
<script type="text/javascript">   
    var viewModel = {        
        details: ko.observable()
    };
    ko.applyBindings(viewModel);
    viewModel.details("<em>For further details, view the report <a href='report.html'>here</a>.</em>");

</script>      

這樣Html 的EM标簽就會顯示于此

Knockout.Js官網學習(html綁定、css綁定)

KO設定該參數值到元素的innerHTML屬性上,元素之前的内容将被覆寫。

如果參數是監控屬性observable的,那元素的内容将根據參數值的變化而更新,如果不是,那元素的内容将隻設定一次并且以後不在更新。

如果你傳的是不是數字或者字元串(例如一個對象或者數組),那顯示的文本将是yourParameter.toString()的等價内容。

關于HTML encoding

 因為該綁定設定元素的innerHTML,你應該注意不要使用不安全的HTML代碼,因為有可能引起腳本注入攻擊。如果你不确信是否安全(比如顯示使用者輸入的内容),那你應該使用text綁定,因為這個綁定隻是設定元素的text 值innerText和textContent。

Css綁定

 css綁定是添加或删除一個或多個CSS class到DOM元素上。 非常有用,比如當數字變成負數時高亮顯示。(注:如果你不想應用CSS class而是想引用style屬性的話,請參考style綁定。)

<p style="background: gray; color: #ffffff; font-size: 18pt;">Html綁定</p>      
<script type="text/javascript">   
    var viewModel = {        
        details: ko.observable(),
        currentProfit: ko.observable(150000)
    };
    ko.applyBindings(viewModel);
    viewModel.currentProfit(-50);
    viewModel.details("<em>For further details, view the report <a href='report.html'>here</a>.</em>");

</script>        

運作後的效果為

Knockout.Js官網學習(html綁定、css綁定)

記得還寫了一個css樣式

.profitWarning {
    color: red;
}      

 該參數是一個JavaScript對象,屬性是你的CSS class名稱,值是比較用的true或false,用來決定是否應該使用這個CSS class。

  你可以一次設定多個CSS class。例如,如果你的view model有一個叫isServre的屬性,

<div data-bind="css: { profitWarning: currentProfit() < 0, majorHighlight: isSevere }">      

   如果參數是監控屬性observable的,那随着值的變化将會自動添加或者删除該元素上的CSS class。如果不是,那CSS class将會隻添加或者删除一次并且以後不在更新。

    你可以使用任何JavaScript表達式或函數作為參數。KO将用它的執行結果來決定是否應用或删除CSS class。

應用的CSS class的名字不是合法的JavaScript變量命名

如果你想使用my-class class,你不能寫成這樣:

<div data-bind="css: { my-class: someValue }">...</div>      

 因為my-class不是一個合法的命名。解決方案是:在my-class兩邊加引号作為一個字元串使用。這是一個合法的JavaScript 對象 文字(從JSON技術規格說明來說,你任何時候都應該這樣使用,雖然不是必須的)。例如

<div data-bind="css: { 'my-class': someValue }">...</div>      

繼續閱讀