title: How to add an item to an ExtJS GridPanel without firing selectionchanged event
body: <p>I've got an ExtJS interface that addresses a problem I'm sure <em>tons</em> of people have had before.  I have a service that exposes a list of items, and I need to show that list in a GridPanel.  I have this part working.  When I click one of the items, I handle the <code>selectionchange</code> event in the GridPanel's SelectionModel, and use it to load details of the resource from another REST call.</p>
  
  <p>Now, I want to be able to <em>add</em> a new item.  This seems like it should be simple, but I want to add the item to the GridPanel and at the same time clear the "detail" fields so the user can enter new details and save a complete item.  I have an Add button, which creates a Prompt to input an item name.</p>
  
  <p>Now, I add this item to the GridPanel's backing data store (a <code>JsonStore</code> if that matters) and use <code>getSelectionModel().selectLastRow()</code> to highlight it.  Of course, this fires off the <code>selectionchange</code> event, which wants to load the details of the (non-existent) item.  I've tried using <code>.purgeListeners()</code>, making the `selectLastRow() call, then restoring the selectionchange listener, but for some reason the changed event still fires off -- I don't actually have any symptoms in the UI, but I can see in Firebug that it's making a (failed) GET call for the item details.</p>
  
  <p>I'd like to stop this from happening, and I feel like this should be a common / easy problem, but I haven't been able to find a solution.  What's the <em>right</em> way to add a new item to the GridPanel without having your code try to "look up" the item before you save it?</p>
  
  <p>ETA: A commenter pointed out that there's a <code>phantom</code> property on Record objects, which sounds like exactly what a want.  However, when I load my item list as</p>
  
  <pre><code>STORE = new Ext.data.JsonStore({
    autoLoad: true,
    url: 'items'
    method: 'GET',
    storeId: 'store',
    root: 'list',
    remoteSort: false,
    fields: ['name']
  });
  </code></pre>
  
  <p><em>all</em> the records in the list, as soon as I load them, are marked <code>phantom</code>.  Does <code>phantom</code> not work with JsonStore?  Should I go about this another way?</p>
  
  <p>ETA Again: OK, found it.  I wasn't setting the <code>idProperty</code> property on my JsonStore constructor, which meant that the Records didn't have an id, which meant that they were always <code>phantom</code>.  Now my new record shows <code>phantom</code> while ones that are already in the DB do not.  Woo-hoo!</p>