2016-04-27 4 views
0

Мое приложение отправляет многократно запрос на сервер каждый раз, когда я вставляю новый элемент для хранения. Когда первый элемент вставлен, он вызывает POST один раз, еще один элемент ... дважды и так далее.Прокси отправляет многократные запросы из магазина ExtJs

Im новый в ExtJS, так что вы можете мне помочь в решении некоторых Qustions:

  1. Прежде всего то, что метод синхронизации сделать, почему (GET, POST, PUT, DELETE) методы не называются без метода store.sync() invok?
  2. Почему мой метод сообщения умножить просит?
  3. Почему метод store.remove() (DELETE) вызывает ошибку 400 (Плохой запрос), когда метод PUT работает нормально?

Спасибо заранее

мой редактировать контроллер:

Ext.define('MVC.controller.Edit', { 
extend: 'Ext.app.Controller', 


init: function() { 
    this.control({ 
     'editForm > button#SaveRecord': { 
      click: this.onSaveButtonClick 
     }, 
     'editForm > button#DeleteButton': { 
      click: this.onDeleteButtonClick 
     } 
    }); 
}, 

onSaveButtonClick: function (btn) { 
    //get reference to the form 
    var detailView = btn.up('editForm'); 

    //get the form inputs 
    var data = detailView.getValues(); 

    //see if the record exists 
    var store = Ext.getStore('TestStore'); 
    console.log(data.id); 
    var record = store.getById(data.id); 

    if (!record) { 
     record = Ext.create('MVC.model.Note', { 
      title: data.title, 
      created: new Date(), 
      updated: new Date(), 
      text: data.text 
     }); 

     store.insert(0, record); 
     store.sync(); 
     Ext.MessageBox.alert('Created', record.id); 
     return; 
    } 

    record.set(data); 

    store.sync(); 
    //manually update the record 
    detailView.updateRecord(); 
}, 

onDeleteButtonClick: function (btn) { 

    //get reference to the form 
    var detailView = btn.up('editForm'); 

    //get the form inputs 
    var data = detailView.getValues(); 

    var store = Ext.getStore('TestStore'); 
    var record = store.getById(data.id); 
    store.remove(record); 
    store.sync(); 
} 
}); 

Магазин:

Ext.define('MVC.store.TestStore', { 
extend : 'Ext.data.Store', 

requires : [ 
    'MVC.model.Note' 
], 

storeId : 'TestStore', 
model : 'MVC.model.Note', 
autoLoad: false, 
proxy: { 
    type : 'rest', 
    url: 'rest/notes', 
    actionMethods : { 
     create : 'POST', 
     read : 'GET', 
     update : 'PUT', 
     destroy : 'DELETE' 
    }, 
    reader: { 
     type: 'json', 
     rootProperty: 'data' 
    }, 
    writer: { 
     type: 'json' 
    } 
} 
}); 

И модель:

Ext.define('MVC.model.Note', { 
extend: 'Ext.data.Model', 

fields: [ 
    { 
     name: 'id', 
     type: 'string' 
    }, 
    { 
     name: 'title', 
     type: 'string' 
    }, 
    { 
     name: 'created', 
     type: 'date' 
    }, 
    { 
     name: 'updated', 
     type: 'date' 
    }, 
    { 
     name: 'text', 
     type: 'string' 
    } 
] 
}); 

ответ

0

Попробуйте использовать методы записи, то:

1) Добавить прокси-сервер для you'r модели, как это:

Ext.define('MVC.model.Note',{ 
extend: 'Ext.data.Model', 

fields: [ 
{ 
    name: 'id', 
    type: 'string' 
}, 
{ 
    name: 'title', 
    type: 'string' 
}, 
{ 
    name: 'created', 
    type: 'date' 
}, 
{ 
    name: 'updated', 
    type: 'date' 
}, 
{ 
    name: 'text', 
    type: 'string' 
}], 

proxy: 
{ 
    type: 'rest', 
    url: 'rest/notes', 
    reader: 
    { 
     type: 'json' 
    } 
} 
}); 

2) Теперь вы можете использовать методы: record.save() - пошлет PUT, если оно было загружены для хранения с сервера и записи имеют идентификатор, или POST если эта запись была создана с использованием record.create(); record.destroy() - отправит DELETE на сервер с идентификационным номером; Вы можете использовать Ext.ModelManager.getModel('Model_name').load(id) для отправки GET запрос на сервер для одной записи. 3) Использовать store.load() до GET массив записей с сервера

Смежные вопросы