2017-05-30 6 views
1

this exampleのような一般的な行調整グリッドを実装しようとしましたが、変更をサーバーバックエンドと同期したいと思います。これまではonRoweditAddという新しい行を追加することができます。同期を使用したroweditグリッド

Ext.define('Mb.view.base.RoweditListController', { 
    extend: 'Ext.app.ViewController', 
    alias: 'controller.roweditlist', 
    onRoweditAdd: function(me){ 
     var grid = me.up('panel'), 
      edit = grid.editingPlugin, 
      store = grid.getStore(), 
      record = store.getModel().create({id: 0}); 
     edit.cancelEdit() 
     store.insert(0, record) 
     edit.startEdit(record, 0) 
    }, 
    editRowedit: function(editor, ctx) { 
     var store = ctx.grid.getStore(); 
     store.sync() 
    } 
}) 

問題はstore.sync()がサーバにcreate要求を送信しないということですが、update要求。 store.insert(0, record)は考慮されていないようです。ユーザーが行った変更のみが同期されます。何が犯人だろうか?

+0

を参照してください、しかし、[私の場合には、作成のみを更新、決して呼び出されません。奇妙です。](https://fiddle.sencha.com/#view/editor&fiddle/20j3) – Alexander

+0

私も試してみましたが、できるだけそれを再現することはできません。 –

+0

@Alexander回避策を見つけたので、私の答えを見てください。 ID 0のレコードを作成できない理由を理解していれば、それをあなたの答えとしてください。私はそれを受け入れます。 –

答えて

4

レコードに既存のidを付けることにより、ExtJSはこのレコードが既にあなたの店舗に存在し、更新されているものとみなします。あなたがIDを与えなければ、それは新しく作成されたレコードであると仮定し、作成ルートに行くでしょう。これは生成されたID戦略(一般的にはそうすべきです)を使用することを前提としているため、作成時に自分自身でIDを提供することはありません。

ExtJSはレコードをファントムとして記録します:trueまたはfalse。ファントムレコードは、フロントエンドにのみ存在し、まだ永続化されていないレコードです。なしidでレコードを作成すると、すでにファントムとしてそれをマークしません提供されたIDを持つレコードを作成するのに対し、ファントムとしてそれをマークし、作成コールが、更新をトリガしません代わりに

私は Ext.data.Model idPropertyにとして使用されていることがわかっ
+0

ありがとうございます。これはExtJs 4との違いです。ここで 'id == 0'は*新しいレコード* –

1

残念ながら、問題を再現するフィドルを作成できませんでした。

私は、この行を変更することによってそれを解決:

record = store.getModel().create({id: 0}); 

record = store.getModel().create({}); 

に問題がExtJSの5以来のレコードIDの新しい実装で何かを持っているしかし、私はそれを説明することはできません...

id: 0の新しいレコードの作成は、ExtJs 6ではサポートされていません。

1

レコードを識別するためのユニークなキー。デフォルトではidフィールドが設定されています。重複して提供すると、storeに問題が発生します。

この説明は、ExtJSのドキュメントに

The data values for this field must be unique or there will be id value collisions in the Ext.data.Store. 
Defaults to: 
'id' 

を書いた私が再現しようとしたlink

関連する問題