- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Breeze.js 将我的数据模型交给 Knockout.js,以相当简单的 View 模型处理适配器库。我使用 tablesorter 对实体属性进行排序表以及这个 knockout 绑定(bind)处理程序:
ko.bindingHandlers.sort = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var asc = false;
element.style.cursor = 'pointer';
element.onclick = function () {
var value = valueAccessor();
var prop = value.prop;
var data = value.arr;
asc = !asc;
if (asc) {
data.sort(function (left, right) {
return left[prop]() === right[prop]() ? 0 : left[prop]() < right[prop]() ? -1 : 1;
});
} else {
data.sort(function (left, right) {
return left[prop]() === right[prop]() ? 0 : left[prop]() > right[prop]() ? -1 : 1;
});
}
};
}
};
我正在扩展 Breeze 数据服务中的导航属性,它可以将数据绑定(bind)到表中。
em.executeQuery(breeze.EntityQuery.from('SpecificAdapters').expand('Adapter'));
从 js 访问 EF 中的特定数据将是:specialAdapters()[0].Adapter().BoardName
。使用这样的 html:
<table class="tablesorter">
<thead>
<tr>
<th data-bind="sort: {arr: specificAdapters, prop: 'Adapter().BoardName'}">Board Name</th>
<th data-bind="sort: {arr: specificAdapters, prop: 'PbaNumber'}">Pba Number</th>
</tr>
</thead>
<tbody data-bind="foreach: specificAdapters">
<tr>
<td data-bind="text: Adapter().BoardName"></td>
<td data-bind="text: PbaNumber"></td>
</tr>
</tbody>
</table>
我看到“板名称”和“PBA 编号”列均已正确填充。 PBA 编号列对两个方向进行排序。显然,我在使用“板名称”列进行排序时遇到错误。
问题是,我该如何完成这项工作?
我不太了解绑定(bind)处理程序代码,不知道要更改哪些内容才能使该功能适用于这两种情况。我所理解的另一个解决方案将涉及扩展 Breeze 中的实体,例如
var store = em.metadataStore;
var SpecificAdapter = function () { this.BoardName = ko.observable(''); };
store.registerEntityTypeCtor('SpecificAdapter', SpecificAdapter);
然后在执行查询后运行循环以将板名称重新映射到其他实体。但这看起来像是一个拼凑,并且必须在我的应用程序中多次执行,其中对绑定(bind)处理程序的修复将是最好的解决方案。
感谢@awexfwex的回答
我必须稍微调整一下代码:ko.utils.unwrapObservable
是当前对展开的访问,而leftProp[propNestings[i]]
实际上翻译了一个嵌套的和尚未解包属性,它将显示为“Adapter()”
。因此,在使用 ()
为数组建立索引之前,您必须删除它。
最终代码:
ko.bindingHandlers.sort = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var asc = false;
element.style.cursor = 'pointer';
element.onclick = function () {
var value = valueAccessor();
var prop = value.prop;
var data = value.arr;
var propNestings = prop.split(".");
var propNestingsCount = propNestings.length;
asc = !asc;
if (asc) {
data.sort(function (left, right) {
var leftProp = ko.utils.unwrapObservable(left);
var rightProp = ko.utils.unwrapObservable(right);
for (var i = 0; i < propNestingsCount; i++) {
leftProp = ko.utils.unwrapObservable(leftProp[propNestings[i].replace('()', '')]);
rightProp = ko.utils.unwrapObservable(rightProp[propNestings[i].replace('()', '')]);
}
return leftProp === rightProp ? 0 : leftProp < rightProp ? -1 : 1;
});
} else {
data.sort(function (left, right) {
var leftProp = ko.utils.unwrapObservable(left);
var rightProp = ko.utils.unwrapObservable(right);
for (var i = 0; i < propNestingsCount; i++) {
leftProp = ko.utils.unwrapObservable(leftProp[propNestings[i].replace('()', '')]);
rightProp = ko.utils.unwrapObservable(rightProp[propNestings[i].replace('()', '')]);
}
return leftProp === rightProp ? 0 : leftProp > rightProp ? -1 : 1;
});
}
};
}
};
最佳答案
在您的排序函数中,假设排序属性只是 knockout 可观察量的命名属性。您可以尝试递归地解开它们,例如(未经测试):
ko.bindingHandlers.sort = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var asc = false;
element.style.cursor = 'pointer';
element.onclick = function () {
var value = valueAccessor();
var prop = value.prop;
var data = value.arr;
var propNestings = prop.split(".");
var propNestingsCount = propNestings.length;
asc = !asc;
if (asc) {
data.sort(function (left, right) {
var leftProp = ko.unwrapObservable(left);
var rightProp = ko.unwrapObservable(right);
for (var i = 0; i < propNestingsCount; i++) {
leftProp = ko.unwrapObservable(leftProp[propNestings[i]]);
rightProp = ko.unwrapObservable(rightProp[propNestings[i]]);
}
return leftProp === rightProp ? 0 : leftProp < rightProp ? -1 : 1;
});
} else {
data.sort(function (left, right) {
var leftProp = ko.unwrapObservable(left);
var rightProp = ko.unwrapObservable(right);
for (var i = 0; i < propNestingsCount; i++) {
leftProp = ko.unwrapObservable(leftProp[propNestings[i]]);
rightProp = ko.unwrapObservable(rightProp[propNestings[i]]);
}
return leftProp === rightProp ? 0 : leftProp > rightProp ? -1 : 1;
});
}
};
}
};
关于javascript - 如何使用 Breeze 导航属性对 knockout 中的 html 表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771607/
我有一台 MySQL 服务器和一台 PostgreSQL 服务器。 需要从多个表中复制或重新插入一组数据 MySQL 流式传输/同步到 PostgreSQL 表。 这种复制可以基于时间(Sync)或事
如果两个表的 id 彼此相等,我尝试从一个表中获取数据。这是我使用的代码: SELECT id_to , email_to , name_to , status_to
我有一个 Excel 工作表。顶行对应于列名称,而连续的行每行代表一个条目。 如何将此 Excel 工作表转换为 SQL 表? 我使用的是 SQL Server 2005。 最佳答案 这取决于您使用哪
我想合并两个 Django 模型并创建一个模型。让我们假设我有第一个表表 A,其中包含一些列和数据。 Table A -------------- col1 col2 col3 col
我有两个表:table1,table2,如下所示 table1: id name 1 tamil 2 english 3 maths 4 science table2: p
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 1 年前。 Improve th
下面两个语句有什么区别? newTable = orginalTable 或 newTable.data(originalTable) 我怀疑 .data() 方法具有性能优势,因为它在标准 AX 中
我有一个表,我没有在其中显式定义主键,它并不是真正需要的功能......但是一位同事建议我添加一个列作为唯一主键以随着数据库的增长提高性能...... 谁能解释一下这是如何提高性能的? 没有使用索引(
如何将表“产品”中的产品记录与其不同表“图像”中的图像相关联? 我正在对产品 ID 使用自动增量。 我觉得不可能进行关联,因为产品 ID 是自动递增的,因此在插入期间不可用! 如何插入新产品,获取产品
我有一个 sql 表,其中包含关键字和出现次数,如下所示(尽管出现次数并不重要): ____________ dog | 3 | ____________ rat | 7 | ____
是否可以使用目标表中的LAST_INSERT_ID更新源表? INSERT INTO `target` SELECT `a`, `b` FROM `source` 目标表有一个自动增量键id,我想将其
我正在重建一个搜索查询,因为它在“我看到的”中变得多余,我想知道什么 (albums_artists, artists) ( ) does in join? is it for boosting pe
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我试图获取 MySQL 表中的所有行并将它们放入 HTML 表中: Exam ID Status Assigned Examiner
如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签? 这是我的表格: -- -- Table structure for table `photos` -
我的网站都在 InnoDB 表上运行,目前为止运行良好。现在我想知道在我的网站上实时发生了什么,所以我将每个页面浏览量(页面、引荐来源网址、IP、主机名等)存储在 InnoDB 表中。每秒大约有 10
我在想我会为 mysql 准备两个表。一个用于存储登录信息,另一个用于存储送货地址。这是传统方式还是所有内容都存储在一张表中? 对于两个表...有没有办法自动将表 A 的列复制到表 B,以便我可以引用
我不是程序员,我从这个表格中阅读了很多关于如何解决我的问题的内容,但我的搜索效果不好 我有两张 table 表 1:成员 id*| name | surname -------------------
我知道如何在 ASP.NET 中显示真实表,例如 public ActionResult Index() { var s = db.StaffInfoDBSet.ToList(); r
我正在尝试运行以下查询: "insert into visits set source = 'http://google.com' and country = 'en' and ref = '1234
我是一名优秀的程序员,十分优秀!