通常我们需要从列表中显示项目,例如,您可以拥有一些项目,每个用户可以处理其中一些项目,在为项目分配时,我们添加projectfirst然后使用projectId引用它们。
当我开始玩Breezejs和Knockout时,我发现当有50个以上的项目使用dropdown(Select)html元素是不切实际的,并且在你不要让你使用Dropdown是不对的用户改变价值。所以我从projectId
获取以下代码获取项目名称 itemName: function (items, item) {
var r = '';
if (item() == '') return r;
var match = ko.utils.arrayFirst(getLocal('projects', 'name', true), function (i) {
return i.id() === item();
});
if (match) r = match.name();
return r;
}
项目是预先获取并存储在本地的项目列表。 但我发现性能仍然不能接受,javascript很忙,我觉得arrayFirst的搜索效率还不够高?
现在我让服务器端返回projectId和projectName,并在需要时显示projectName,看起来更好,但除了数据冗余之外,还有另一个问题,即保存更改。
有什么建议在这里做正确的方法吗?
由于
答案 0 :(得分:0)
我的建议;将项目数据公开为Lookup List
然后在应用程序启动时向此列表发出请求。
在用户页面上,将本地项目列表加载到可观察的Projects()
绑定时,您的选择列表可能如下所示:
<!-- ko foreach: Users -->
<!--Other fields go here -->
<select size="10" data-bind="options: $parent.Projects,
optionsText: 'name', value: projectId">
</select>
<!-- /ko -->
您将拥有一个大小为10的可滚动列表。(您可以按照您的情况制作尺寸50)。值projectId
实际上是Users
的外键值,它将保存到数据库中,您不必使用knockout arrayFilter
或arrayFirst
。< / p>
经过100多行测试,性能令人满意。
希望有所帮助。