gpt4 book ai didi

knockout.js - 排序 Breeze 导航属性

转载 作者:行者123 更新时间:2023-12-04 05:00:50 27 4
gpt4 key购买 nike

如何在 Breeze 实体中对一组实体进行排序?例如,如果我有一个包含许多项目的订单,如何按 orderDate 对项目进行排序?

    <div databind="ko with: order">
<ol databind="foreach: items">
<li/>
</ol>
</div>

此外,我不能在数据绑定(bind)中使用 items.sort(),因为我正在使列表项可排序。 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDYQFjAA&url=https%3A%2F%2Fgithub.com%2Frniemeyer%2Fknockout-sortable&ei=8BJ3UaXZMMGG2wW5yoGQCw&usg=AFQjCNFnjZ_6ths9dl_UW9BpJkFO3Yi6kA&sig2=swWZW7Rq6IqAcIX2-2Cl6w&bvm=bv.45580626,d.b2I 强文本

最佳答案

我认为简短的回答是“你不能”。 Breeze 实体属性是简单的、无序的 ObservableArrays,因为它们是模型的一部分。

你想要实现的是一个 UI 效果......严格来说,它不属于模型。该模型应该是独立于 UI 的。如果订单数据存储在 SQL 数据库中,则订单项目的顺序在此处是严格未定义的。

理论够了。你有工作要做。我能做什么?两件事之一

1) 使用 OrderViewModel

“OrderViewModel”是一个“ItemViewModel”,它是一个模型对象的包装器,具有支持 View 的“特殊能力”。 OrderViewModel 可以公开其包装的 Order 对象以绑定(bind)其大部分属性。但是当你需要一些特别的东西时......比如你的排序“项目”......你创建一个 KO 属性 在 OrderViewModel 出于显示目的......将其称为“sortableItems”并在您的 View 中绑定(bind)到 THAT。

这是一个简单的伪代码实现:

app.OrderViewModel = 功能(订单){
this.order = 订单;
this.sortableItems = ko.observableArray();

this.resetSortableItems();
}

app.OrderViewModel.prototype.resetSortableItems() {
//(重新)使用项目的副本初始化
this.sortableItems(this.order.items().slice(0));
//也许这里有一些排序逻辑?
}

您的“sortableItems”涵盖了内部 Order.items以您希望的方式;它可能是可排序的,也许是通过您提到的 KO-Sortable 功能。

困难的部分(未显示)使其与内部 Order.items 保持同步房产 添加或删除项目时 .记住内部Order.items属性(property)是真相的真正来源。也许你很幸运,并且完全掌握了可以添加/删除项目的任何东西;那么您可以调用resetSortableItems发生这些变化时的方法。

这是我能带给你的。

2) 使用 Order.sortableItems 扩展 Order 实体

也许你已经决定不做这样一个纯粹主义者。您愿意修改模型实体以使其与您的 UI 配合得很好。因此,您添加了我刚刚描述的 KO-Sortable 属性……但将其添加到 Order实体 in a Custom Initializer而不是 OrderViewModel。

这可能会为您简化事情。另一方面,您已经 (a) 用 UI 问题污染了 Order 实体,并且 (b) 将自己限制在单一种类的项目上,这些项目将适用于引用给定 Order 的所有 View 。对于 (a) 你可以说“谁在乎?” (我一直这样做)。但是 (b) 可能是一个问题……在这种情况下,您可以返回 OrderViewModel 以获得最大的灵 active 。

关于knockout.js - 排序 Breeze 导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180592/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com