使用服务器端数据刷新gridx

时间:2014-08-07 18:01:27

标签: javascript dojo dojo.gridx jsonreststore

我认为我忽略了一些简单的事情 - 我非常接近于完成这项工作。 :)

我有一个需要使用服务器信息更新的网格。

以下是它的工作方式:

  1. 用户选择项目
  2. 使用选定的项目ID进行JsonRest查询
  3. 更新网格 - 显示与所选项目相关的注释
  4. 以下是网格的设置方式:

    function noteTabSetup(){

    var store = JsonRest({target:"//localhost/program/notes", idAttribute:"id"});
    
    var structure = [{ field: 'id', name: 'Id', width: '5em' },
             { field: 'name', name: 'Name', width: '12%' },
             { field: 'description', name: 'Description' }];
    
    var noteGrid = new Grid({
      id: 'noteGrid',
      pageSize: 20,
      store: store,
      cacheClass: Cache,
      structure: structure,
      filterServerMode: true,
      selectRowTriggerOnCell: true,
      bodyLoadingInfo: "Loading notes ...",
      bodyEmptyInfo: "No notes found",
      modules: [SingleSort, VirtualVScroller, moveColumn,
        selectColumn, dndColumn, selectRow, Filter]}, noteTab);
    
    noteGrid.startup();
    

    选择项目后,所选项目ID将传递到:

    function noteLoad(itemId) {
     console.log("In NoteLoad");
     var grid = registry.byId("noteGrid");
    
     if (!itemIds || 0 === itemIds.length) { console.log("no ItemId chosen"); }
     else {
      console.log("In NoteLoad with an itemId");
    
      grid.model.clearCache();
    
      // Error on second run
      grid.store.query({ find: "ByItem", item: itemId }).then(function(result) {
        grid.setStore(new ItemFileReadStore({data: {items : result}}));
      }); 
    
      grid.body.refresh();
      console.log("model: " + grid.rowCount());
     };
    };
    

    在选定的第一个项目上,一切正常 - 查询将触发,并且网格将使用与所选项目相关的注释进行更新。 在选择的第二个项目上,我从firebug收到此错误:

    TypeError: grid.store.query is not a function
    grid.store.query({ find: "ByItem", item: itemIds }).then(function(result) {
    -----------------------------------^
    

    任何想法?!先感谢您。 克里斯


    感谢您的回复 - 有意义的商店被ItemFileReadStore取代。如果可能的话,我想直接使用JsonRest来更新网格。

    我根据您的评论尝试了一些变体,没有运气:

    查询触发并返回结果。网格未更新:

    grid.model.clearCache();
    grid.store.query({ find: "ByItem", item: itemIds }).then(function(results){
      console.log('notes: ' + results[0].name);
    });
    grid.body.refresh();
    

    错误:grid.store.fetch不是函数:

    grid.store.fetch({ query: { find: "ByItem", item: itemIds }});
    

    Dojo.js中的语法错误(第15行):

    grid.store.query({ find: "ByItem", item: itemIds }).then(function(result) {
      grid.setStore(new JsonRest({data: {items : result}}));
    });
    

    我已经完成了很多搜索,并且找不到从JsonRest对象更新网格的好例子。谢谢。

1 个答案:

答案 0 :(得分:0)

因为代码本身第一次替换了商店。

grid.store.query({ find: "ByItem", item: itemId }).then(function(result) {
  grid.setStore(new ItemFileReadStore({data: {items : result}}));
});

这里,网格的存储最初是JsonRest存储,在运行查询方法之后,它被新的ItemFileReadStore对象替换。这里的错误是“query”不是ItemFileReadStore的方法,而是传递给“fetch”方法的参数。查看dojo文档中的一些示例。

另一方面,JsonRest商店有方法“查询”。因此矛盾。如果您想要ItemFileReadStore,请相应地更改您的代码。

例如: -

store.fetch( { query: { name: 'Ice cream' },  
               onItem: function(item) {
                  console.log( store.getValue( item, 'name' ) );
                  console.log( 'cost: ', store.getValue( item, 'cost' ) );
               }
});