我使用knockout js根据表达式的结果设置元素的类,我想知道的是,是否可以将类设置为视图模型中函数返回的值。
这就是我现在所做的工作:
<div data-bind="css: { highlightup : OneDayChange > 0 && SevenDayChange > 0}">
</div
我想有类似的事情:
<div data-bind="css: { bothValuesIncreasing(); }">
</div
修改 为了澄清我希望该类由函数返回的值设置,但它可能不是布尔值,它可以是函数返回的任何字符串
答案 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
不要害怕将这些属性用于特定于视图的操作。那是什么视图模型创建的。
响应更新: 自定义绑定是解决此问题的最佳选择。
上找到了答案绑定 - https://github.com/SteveSanderson/knockout/wiki/Bindings---class
答案 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
中精辟地解释了这一点