fetchItemByIdentity()无法按预期工作

时间:2011-04-27 23:31:48

标签: javascript datagrid dojo

我的页面上有ItemFileWriteStore。当我单击DataGrid中的任意行时,我可以获取该行的ID,但是当我尝试使用该ID执行fetchItemByIdentity时,它始终返回null。知道为什么会这样吗?

我正在使用Dojo 1.5。

function getRemoveFormatter(id) {
  return '<a href="#" onclick="deleteItem(' + id + ');return false;"><img src="/images/icons/delete.png" /></a>';
}

function deleteItem(id) {
  console.log(id);
  window.grid.store.fetchItemByIdentity({
    identity: id,
    onItem: function(item, request) { console.log(item); }
  });
  //window.grid.store.deleteItem(id);
}

dojo.ready(function() {
  var store = new dojo.data.ItemFileWriteStore({data:{items:[]}});
  window.grid = new dojox.grid.DataGrid({
    store: store,
    structure: [
      { name: "id", field: "id", width: "50px" },
      { name: "Stylist", field: "stylist", width: "100px" },
      { name: "Service", field: "service", width: "200px" },
      { name: "Length", field: "length", width: "50px" },
      { name: "Remove", field: "remove", width: "30px", formatter: getRemoveFormatter }
    ],
    identifier: "id",
    label: "id"});
  dojo.byId("services_grid").appendChild(grid.domNode);
  grid.startup();
  observeAppointmentServiceAddClick(window.grid);
  getAppointmentItems();
});

2 个答案:

答案 0 :(得分:2)

尝试对声明商店和网格的方式进行一些小改动。标识符和标签属性属于商品旁边商店的数据部分。

var store = new dojo.data.ItemFileWriteStore({data:{
     items:[], 
     identifier: "id",
     label: "id"}});

window.grid = new dojox.grid.DataGrid({
store: store,
structure: [
  { name: "id", field: "id", width: "50px" },
  { name: "Stylist", field: "stylist", width: "100px" },
  { name: "Service", field: "service", width: "200px" },
  { name: "Length", field: "length", width: "50px" },
  { name: "Remove", field: "remove", width: "30px", formatter: getRemoveFormatter }
]});

答案 1 :(得分:1)

这是一个更简单的代码和jsfiddle的答案。

http://jsfiddle.net/martlark/UkKXW/1/

<html>
   <head><!--dojo stuff--></head>
   <body>
      <div id='store'></div>
      <div id='log'></div>
   </body>
</html>


dojo.require("dojo.data.ItemFileWriteStore");
var store = null;

function getItem(id) {
store.fetchItemByIdentity({
    identity: id,
    onItem: function (item, request) {
        var v = store.getValue(item, 'value');
        dojo.byId('log').innerHTML = 'getItem(' + id + ') =' + v;
    }
});
}

dojo.ready(function () {
var items = [];

for (var p = 0; p < 5; p++) {
    items.push({
        id: p,
        value: 'v ' + p
    });
}

store = new dojo.data.ItemFileWriteStore({
    data: {
        identifier: 'id',
        items: items
    }
});

var gotList = function (items, request) {
    var itemsList = "<ul>";
    dojo.forEach(items, function (i) {
        itemsList += '<li> id:' + p + ' = ' + store.getValue(i,
            "value") + "</li>";
    });
    itemsList += '</ul>';
    dojo.byId('store').innerHTML = itemsList;
}
var gotError = function (error, request) {
    alert("The request to the store failed. " + error);
}
// Invoke the search
store.fetch({
    onComplete: gotList,
    onError: gotError
});
getItem('2');
});