knockout js将类绑定到函数的结果

时间:2012-01-31 11:26:58

标签: knockout.js

我使用knockout js根据表达式的结果设置元素的类,我想知道的是,是否可以将类设置为视图模型中函数返回的值。

这就是我现在所做的工作:

<div data-bind="css: { highlightup : OneDayChange > 0 &&  SevenDayChange > 0}">
</div

我想有类似的事情:

<div data-bind="css: { bothValuesIncreasing(); }">
</div

修改 为了澄清我希望该类由函数返回的值设置,但它可能不是布尔值,它可以是函数返回的任何字符串

2 个答案:

答案 0 :(得分:6)

您需要使用computed属性。

var vm = function(){
  var self = this;
  self.OneDayChange = ko.observable();
  self.SevenDayChange = ko.observable();
  self.isBothValue = ko.computed(function(){
    return self.OneDayChange() > 0 && self.SevenDayChange() > 0;
  });
}

<div data-bind="css: { highlightup: isBothValue() }">
</div

不要害怕将这些属性用于特定于视图的操作。那是什么视图模型创建的。

响应更新: 自定义绑定是解决此问题的最佳选择。

其实我在KnockoutJs google groups

上找到了答案

绑定 - https://github.com/SteveSanderson/knockout/wiki/Bindings---class

演示 - http://jsfiddle.net/mbest/NBmjh/

答案 1 :(得分:0)

通常的做法是将此逻辑移至viewModel并使用dependendObservables

viewModel.isHighlightup = ko.dependentObservable(function() {
    return this.OneDayChange > 0 && this.SevenDayChange > 0
}, viewModel);

<div data-bind="css: { highlightup : isHighlightup }"></div>

Ryan在帖子http://www.knockmeout.net/2011/08/simplifying-and-cleaning-up-views-in.html

中精辟地解释了这一点