Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

css 绑定 #5

Open
wikieswan opened this issue Apr 15, 2015 · 0 comments
Open

css 绑定 #5

wikieswan opened this issue Apr 15, 2015 · 0 comments
Labels

Comments

@wikieswan
Copy link
Member

css 绑定

作用

css 可以实现给指定DOM元素增加或者移除一个或者多个class。例如当参数值发生变化的时候,根据需要,给页面元素高亮成红色。

示例1 静态class

<div data-bind="css: { profitWarning: currentProfit() < 0 }">
       Profit Information
    </div>
var viewModel = {
        currentProfit: ko.observable(150000) // Positive value, so initially we don't apply the "profitWarning" class
    };
    viewModel.currentProfit(-50); // Causes the "profitWarning" class to be applied

    ko.applyBindings(viewModel);
.profitWarning{
  color:#f00;
}

当currentProfit 的值小于0的时候,元素会加上profitWarning 这个class

示例2 动态class

<div data-bind="css: profitStatus">
     Profit Information
  </div>
var viewModel = {
        currentProfit: ko.observable(150000)
    };

    // Evalutes to a positive value, so initially we apply the "profitPositive" class
    viewModel.profitStatus = ko.pureComputed(function() {
        return this.currentProfit() < 0 ? "profitWarning" : "profitPositive";
    }, viewModel);

    // Causes the "profitPositive" class to be removed and "profitWarning" class to be added
    viewModel.currentProfit(-50);
    ko.applyBindings(viewModel);
.profitWarning{
  color:#f00;
}
.profitPositive{
  color:#ff0;
}

当currentProfit是正值的时候,元素会绑定profitPositive class,否则绑定profitWarning class

参数说明

主要参数

如果你使用静态的CSS class,然后传递一个属性名是CSS类名的javascript对象,根据是否加上CSS类的需求,把它们的值设置为true或者false。

可以一次设置多个CSS 类。例如,如果数据模型中有一个属性isSevere

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

用引号括起来多个CSS类,可以实现根据同一个条件来设置多个CSS 类。例如

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

非boolean 会被转化为boolean 型。例如0和null被转化为false;数字21或者非空对象被转化为true。

如果参数是一个observable 参数,当参数值发生改变的时候,绑定元素会添加或者移除CSS类。如果不是,那么直会在第一次绑定的时候添加或者移除CSS类,之后不会改变。

如果你想用动态的CSS类,(所谓动态是指参数去不同的值,元素会绑定不同的CSS类),你需要传递一个字符串,这个字符串用来表示将要添加到DOM上的CSS类名。

如果参数是一个observable参数,绑定的时候会移除DOM原先的所有CSS类,然后根据参数的值给元素添加新的CSS类。

通常,可以使用任意的javascript函数或者表达式作为参数。knockout会计算结果,然后根据逻辑决定添加或者移除CSS类。

其他参数

注意 不能使用不合法的javascript变量名作为CSS类名

如果你想使用my-class类名,你不能像下面这样写:

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

因为这时my-class不是合法的标示符。解决方案很简单,用引号括起来就可以了。这样CSS类名变成了一个简单的字符串文本,对于javascript对象来说这就是合法的属性名了。换句话说,javascript语言本身不支持带'-'的属性名。
例如

    <div data-bind="css: { 'my-class': someValue }"></div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant