【问题标题】:How specify two css classes: from property and conditional class如何指定两个 css 类:来自属性和条件类
【发布时间】:2013-07-28 21:42:18
【问题描述】:

我知道在淘汰赛中可以从可观察的属性中指定类,如下所示:

<div data-bind="css: Color " >

Knockout 还提供了指定条件类渲染的能力,如下所示:

<div data-bind="css: { 'my-class' : SomeBooleanProperty  }" >

但是,如果我需要将淘汰赛 css 的这些功能绑定在一起,应该指定哪个标记?

我试过了,但没有运气:

<div data-bind="css: { Color, 'my-class' : SomeBooleanProperty  }" >

我得到了错误:

错误:无法解析绑定。 SyntaxError: Unexpected token ,;

我在谷歌或官方文档中没有找到任何示例。

更新

我找到了一种解决方法:在代码中构建样式字符串并将其放入属性中,如下所示:

item.AdditionalCss(Color() + " " + (result.IsSortable() ? 'my-class' : null));

并在html中指定这个类:

data-bind="css: AdditionalCss "

但我有点困惑,我认为这是肮脏的做法。我认为在标记中实现相同的结果会更好。如何通过标记实现这一点?

【问题讨论】:

  • 我不确定这是否有效,但请尝试css: { Color : true, 'my-class': SomeBooleanProperty }
  • 感谢@Alxandr,但它不起作用,我得到了标记:class="Color my-class",但我需要属性值 Color 而不是属性名称。
  • 很遗憾的是,knout 没有提供与 'data-bind' 属性相同的绑定。

标签: css knockout.js model-binding


【解决方案1】:

使用class binding

<div data-bind="class: myClass" >

查看模型:

var vm = {
     myClass : ko.observableArray(),
};
vm.myClass.push('class1');
vm.myClass.push('class2');

您还可以将类绑定与计算对象结合使用。

但如果你不想使用它,你可以这样做:

<div data-bind="attr: { 'class' :( Color() +  (SomeBooleanProperty() ? ' my-class' :'')) }">

【讨论】:

  • 谢谢,但我认为这是使用代码的相同解决方法,如果有人给我示例但仅使用“数据绑定”标记会很好。
  • 谢谢,attr-binding 很好用,但是 css-binding 没有提供同样的结果,很遗憾。谢谢,你帮了我。
【解决方案2】:

您也可以使用经典的字符串格式:

<div data-bind="css: Color() + (SomeBooleanProperty ? ' my-class' : '')" >

这个概念的一个例子:

var fullString = ('some' + ' ' + 'strings ') + 'and' + ' ' + 'other strings';
console.log(fullString);

【讨论】:

  • 这个对我有用,非常感谢!这是我的代码,以防有人发现它有用:
  • 结果是:
  • 我不明白这个代码Color()+(SomeBooleanProperty ? ' my-class' : '')任何人都愿意解释。谢谢
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签