Threaded View

    Thank you for reporting this bug. We will make it our priority to review this report.
  1. #1
    Sencha User
    Join Date
    May 2011
    Posts
    2
    Vote Rating
    0
    mark.haylock is on a distinguished road

      0  

    Lightbulb [OPEN-125] Store (using AjaxProxy) duplicates new record when .sync() is called

    [OPEN-125] Store (using AjaxProxy) duplicates new record when .sync() is called


    Sencha Touch version tested:
    • 1.1.0

    Platform tested against:
    • iOS 4
    • Android 2.1

    Description:
    • New records are duplicated in a store after .sync() is called, when using an AjaxProxy.

    Test Case:

    Code:
    // models/contact.js
      app.models.Contact = new Ext.regModel('Contact', {
        fields: [
          { name: 'id', type: 'int' },
          { name: 'first_name', type: 'string' },
          { name: 'last_name', type: 'string' },
          { name: 'email', type: 'string' },
          { name: 'phone', type: 'string' }
        ],
        validations: [
          { type: 'presence', field: 'first_name', message: 'none' },
          { type: 'presence', field: 'last_name', message: 'none' },
          { type: 'email', field: 'email', message: 'Please enter a valid e-mail address.' },
          { type: 'phone', field: 'phone', message: 'Please enter a valid phone number.'}
        ],
        proxy: {
          type: 'ajax',
          url: 'contacts.xml',
          reader: {
            type: 'xml',
            record: 'contact'
          },
          writer: {
            type: 'xml',
            record: 'contact'
          }
        }
      });
    
      Ext.regStore('contacts', {
        autoLoad: true,
        model: 'Contact',
        sorters: ['last_name'],
        sortOnLoad: true,
        getGroupString : function(record) {
            return (record.get('last_name') || '#')[0].toUpperCase();
        },
      });
    
    // in views/contacts/list.js
      app.views.ContactsList = Ext.extend(Ext.Panel, {
        title: 'Contacts',
        layout: 'fit',
        store: 'contacts',
        initComponent: function () {  
          this.list = new Ext.List({
            xtype: 'list',
            id: 'contactslist',
            grouped: true,
            indexBar: true,
            store: this.store,
            itemTpl: '{first_name} <strong>{last_name}</strong>'
          });
          this.items = [this.list];
        
          app.views.ContactsList.superclass.initComponent.apply(this, arguments);
        }
      });
      Ext.reg('contacts/list', app.views.ContactsList);
    
    // in controller:
      var contact = Ext.ModelMgr.create(this.form.getValues(), 'Contact');
      var store = Ext.getStore('contacts');
      store.add(contact);
      store.sync(); // Duplicate appears in views list once .sync() asynchronously completes.
    Steps to reproduce the problem:
    • Attach a store (backed by an AjaxProxy) to a list
    • Add a new (unsaved) record to the same store
    • Call .sync() on store

    The result that was expected:
    • List should reflect one new item in the store

    The result that occurs instead:
    • List shows the new item twice

    Debugging already done:
    • Determined that the record returned from the server is never matched against the existing record in the store - because the internalId doesn't match.

    Possible fix:
    • Please see this commit on github for my change to AjaxProxy.js which fixes this for me.
    • Note that the list isn't sorted properly within each group after my fix, but that might be the fault of the way I'm sorting things at the moment.
    Last edited by mark.haylock; 30 May 2011 at 1:45 PM. Reason: Accidentally submitted the post instead of previewing, so had to complete the post! Sorry.

film izle

hd film izle

film sitesi

takipci kazanma sitesi

takipci kazanma sitesi

güzel olan herşey

takipci alma sitesi

komik eğlenceli videolar