处理列表项的正确方法(显示和编辑)?

时间:2014-03-25 15:40:51

标签: knockout.js breeze

通常我们需要从列表中显示项目,例如,您可以拥有一些项目,每个用户可以处理其中一些项目,在为项目分配时,我们添加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,看起来更好,但除了数据冗余之外,还有另一个问题,即保存更改。

有什么建议在这里做正确的方法吗?

由于

1 个答案:

答案 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 arrayFilterarrayFirst。< / p>

经过100多行测试,性能令人满意。

希望有所帮助。