天天看點

Knockout.Js官網學習(style綁定、attr綁定)

Style綁定

style綁定是添加或删除一個或多個DOM元素上的style值。比如當數字變成負數時高亮顯示,或者根據數字顯示對應寬度的Bar。(注:如果你不是應用style值而是應用CSS class的話,請參考CSS綁定。)

Style簡單示例

<div data-bind="style: { color: currentProfit() < 0 ? 'red' : 'black' }">
       Profit Information
</div>
<script type="text/javascript" src="~/Scripts/knockout-2.3.0.debug.js"></script> 
<script type="text/javascript">
    var viewModel = {
        currentProfit:ko.observable(15000)
    };
    viewModel.currentProfit(-50);
    ko.applyBindings(viewModel);
</script>      

簡單示例代碼,運作後發現為紅色的字型

Knockout.Js官網學習(style綁定、attr綁定)

當currentProfit 小于0的時候div的style.color是紅色,大于的話是黑色。

該參數是一個JavaScript對象,屬性是你的style的名稱,值是該style需要應用的值。

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

<div data-bind="style: { color: currentProfit() < 0 ? 'red' : 'black', fontWeight: isSevere() ? 'bold' : '' }">...</div>      

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

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

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

 如果你需要應用font-weight或者text-decoration,你不能直接使用,而是要使用style對應的JavaScript名稱。

  錯誤: { font-weight: someValue };            正确: { fontWeight: someValue }

    錯誤: { text-decoration: someValue };      正确: { textDecoration: someValue }

參考:style名稱和對應的JavaScript 名稱清單

attr綁定

attr 綁定提供了一種方式可以設定DOM元素的任何屬性值。你可以設定img的src屬性,連接配接的href屬性。使用綁定,當模型屬性改變的時候,它會自動更新。

attr綁定簡單示例

<a data-bind="attr: { href: url, title: details }">    Report</a>
<script type="text/javascript">
    var viewModel = {
        url: ko.observable("year-end.html"),
        details: ko.observable("Report including final year-end statistics")
    };
    ko.applyBindings(viewModel);
</script>      

運作後效果為

Knockout.Js官網學習(style綁定、attr綁定)

呈現結果是該連接配接的href屬性被設定為year-end.html, title屬性被設定為Report including final year-end statistics

該參數是一個JavaScript對象,屬性是你的attribute名稱,值是該attribute需要應用的值。

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

應用的屬性名字不是合法的JavaScript變量命名

如果你要用的屬性名稱是data-something的話,你不能這樣寫:

<div data-bind="attr: { data-something: someValue }">...</div>      

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

<div data-bind="attr: { ‘data-something’: someValue }">...</div>      

繼續閱讀