2016-04-27 13 views
0

ストアする新しいアイテムを挿入するたびに、アプリはサーバーにマルチリクエストを送信します。最初の項目が挿入されると、POSTを1回、1回以上項目を... 2回などと呼び出します。プロキシはExtJsストアから複数のリクエストを送信します

のExtJSで新しいイムので、あなたは、いくつかのqustionsを解決するために私を助けることができます。すべてのものを同期方法の

  1. まずない、(、POSTをGET、PUT、DELETE)メソッドが呼び出されない理由store.sync()メソッドinvokなしで?
  2. なぜ私の投稿方法のリクエストを掛けますか?
  3. PUTメソッドが正常に動作する場合、store.remove()(DELETE)メソッドが400エラー(不正リクエスト)をスローするのはなぜですか?

は、事前にありがとう

私の編集コントローラ:

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モデルにプロキシを追加します。)今、あなたはメソッドに使用できる2

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' 
    } 
} 
}); 

record.save()を - それは PUT送信されますされた場合このレコードが record.create()で作成された場合は POST、サーバーからストアにロードされ、IDを持つレコード。 record.destroy() - レコードのIDが のDELETEをサーバーに送信します。 Ext.ModelManager.getModel('Model_name').load(id)を使用して、 GETリクエストをサーバーに送信してシングルレコードを送信できます。 3)使用 store.load()GETサーバからのレコードの配列

関連する問題