在foreach中敲除动态css绑定
Knockout dynamic css binding in foreach
我正在尝试创建一个带有服务器端排序和使用挖空分页的 html 表网格。
我的工作基于淘汰 simpleGrid 示例。
到目前为止它可以工作,但我在绑定 css 类以显示选择哪一列进行排序时遇到了问题。
这是我的代码:
.html:
<thead>
<tr data-bind="foreach: columns">
<th data-bind="text: headerText, click: $parent.sortBy, css: $parent.sortClass($data)"></th>
</tr>
</thead>
淘汰赛级别 :
viewModel: function (configuration) {
...
// Sort properties
this.sortProperty = configuration.sortProperty;
this.sortDirection = configuration.sortDirection;
...
this.sortClass = function (data) {
return data.propertyName == this.sortProperty() ? this.sortDirection() == 'ascending' ? 'sorting_asc' : 'sorting_desc' : 'sorting';
};
}
我的主要淘汰赛:
this.gridViewModel = new ko.simpleGrid.viewModel({
data: self.items,
pageSize: self.itemsPerPages,
totalItems: self.totalItems,
currentPage: self.currentPage,
sortProperty: self.sortProperty,
sortDirection: self.sortDirection,
columns: [
new ko.simpleGrid.columnModel({ headerText: "Name", rowText: "LastName", propertyName: "LastName" }),
new ko.simpleGrid.columnModel({ headerText: "Date", rowText: "EnrollmentDate", propertyName: "EnrollmentDate" })
],
sortBy: function (data) {
data.direction = data.direction == 'ascending' ? 'descending' : 'ascending';
self.sortProperty = data.propertyName;
self.sortDirection = data.direction;
// Server call
$.getGridData({
url: apiUrl,
start: self.itemStart,
limit: self.itemsPerPages,
column: data.propertyName,
direction: data.direction,
success: function (studentsJson) {
// data binding
self.items(studentsJson.gridData);
}
});
},
}
有了这个,第一次绑定数据时,我的css类被正确应用。但是当我单击一列时,css 类不会更新。
你知道我做错了什么吗?
css 类不会更新,因为$parent.sortClass($data)
意味着在首次应用绑定时只调用一次 sortClass 函数。要在单击时更新它,您可以将 sortClass 转换为计算的可观察量,如下面的代码所示(小提琴:http://jsfiddle.net/ZxEK6/2/)
var Parent = function(){
var self = this;
self.columns = ko.observableArray([
new Column("col1", self),
new Column("col2", self),
new Column("col3", self)
]);
}
var Column = function(headerText, parent){
var self = this;
self.parent = parent;
self.sortDirection = ko.observable();
self.headerText = ko.observable(headerText);
self.sortClass = ko.computed(function(){
if (!self.sortDirection()){
return 'no_sorting';
}
return self.sortDirection() == 'ascending' ? 'sorting_asc' : 'sorting_desc';
},self);
self.sortBy = function(){
if (!self.sortDirection()) {
self.sortDirection('ascending');
} else if (self.sortDirection() === 'ascending'){
self.sortDirection('descending');
} else {
self.sortDirection('ascending');
}
}
}
ko.applyBindings(new Parent())
相关文章:
- chrome扩展在加载dom之前注入动态css
- 将动态CSS样式应用于谷歌地图的标记
- 为动态css背景预加载图像
- 动态 CSS - 多个样式表与单个动态 CSS(渲染性能)
- Javascript 中的动态 CSS 图像 URL
- 余烬2:带参数的动态CSS类
- 在foreach中敲除动态css绑定
- 用 JS 更改.css?使用变量设置动态.css属性
- 流体动态CSS - Javascript/jQuery
- 使用 PHP 和 JavaScript 的动态 CSS
- 设置Backbone.View的动态css样式属性
- 通过道具使用带有React组件的CSSModules动态CSS
- 使用javascript添加动态css
- 用于产品概述电子商务的动态CSS网格
- 使用python或js以pdf格式下载带有动态css的html
- 引导工具提示动态css规范
- 向文档注入动态CSS
- 可见绑定和动态css绑定
- 在javascript中加载动态css
- 动态CSS与PHP - Wordpress &视觉编辑器按钮