【问题标题】:A dgrid row disappears when sorting排序时 dgrid 行消失
【发布时间】:2014-04-22 04:27:43
【问题描述】:

我已经实现了 dgrid。真的很整洁。但是,当我单击行标题进行排序时,除一行之外的所有行都消失了。我要疯了,想弄清楚为什么....

让我们试一试。

DGrid,它是一个基于 dojo 的数据网格,参见 http://dojofoundation.org/packages/dgrid/

当将它与 Javascript 和 HTML 一起使用并连接到 Observable MemStore 时,网格会填充,其中几行非常愉快地显示数据。列是可排序的,即您可以单击行/列标题。但是 - 这就是问题所在 - 当单击这些行/列标题对行进行排序时,除一行之外的所有内容都消失了。

使用内存 (dojo/store/Memory) dGrids 数据存储工作正常 - 即行排序成功。然而,当使用 Observable (dojo/store/Observable) 作为数据存储时,排序会导致行折叠。请看下面的例子。

排序与内存配合得很好:

function populateGrid(Memory, message) {
               var featureOne = {
                      "id": message[0].attributes["id"],
                      "Col2": message[0].attributes["Col2"],
                      "Col3": message[0].attributes["Col3"]
                  }
                var featureTwo = {
                      "id": message[1].attributes["id"],
                      "Col2": message[1].attributes["Col2"],
                      "Col3": message[1].attributes["Col3"]
                  }

                  var data = [feature1, feature2];
                  var memStore = new Memory({ data: data });
                  window.queryRecordsGrid.set("store", memStore);
              }

使用 Observable 时出现错误:

 var memStore;

 function populateGrid(Memory, message) {
                   var feature = {
                          "id": message[0].attributes["id"],
                          "Col2": message[0].attributes["Col2"],
                          "Col3": message[0].attributes["Col3"]
                      }

                     var data = [feature];
                     if (!window.memStore) {
                  window.memStore = new Observable(new Memory({ data: data }));
                  window.grid.set("store", window.memStore);

              } else {

                  window.grid.store.notify(feature, feature.id);

              }
                  }

【问题讨论】:

  • 并非如此。它仍然只是一个口头描述。请包括relevant parts of the code 并说明您要完成的工作以及您的结果与预期结果有何不同。包括您收到的任何错误消息。请在How to Ask 好问题和 Jon Skeet 的博客文章Writing the perfect question 上阅读此建议。请特别注意“黄金法则”,但我强烈建议您阅读整篇文章。

标签: dojo dgrid


【解决方案1】:

这可能是您的问题,也可能不是您的问题,但目前您商店中的商品没有唯一标识符 - 或者如果有,则表示商店没有正确提取它们。 dojo/store/Memory 默认假设每个商店项目都有一个唯一的id。如果您有另一个提供唯一标识符的字段,您可以通过设置idPropertyMemory 意识到这一点,例如:

new Observable(new Memory({ idProperty: "Col1", data: data }));

当您调用 notify 时,您似乎还假设 feature.id 存在,但据我从您的代码中可以看出,它不存在。

【讨论】:

  • 谢谢肯。上面的代码有点做作——我现在已经编辑过了。我使用“id”作为网格和存储中的唯一 ID。我还应该注意到正在使用 onDemandGrid。我将 Observable 用作“全局”变量,因为我使用 Web Sockets 在项目到达时将它们推送到网格 - 这非常有效(除了在排序时折叠的行)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 2014-08-18
  • 2013-04-24
  • 1970-01-01
  • 2016-01-23
  • 2012-09-03
相关资源
最近更新 更多