2010-09-14 35 views
9

Tôi đang cố gắng tìm hiểu cách sử dụng lưới EXTJS cho một số thao tác CRUD đơn giản trên bảng trong ứng dụng quản trị.EXTJS + Cập nhật một cửa hàng có ID cơ sở dữ liệu sau khi lưu lưới

Tôi có một mạng lưới đơn giản mà cho phép một người nào đó để chỉnh sửa người dùng, các cửa hàng được định nghĩa là:

 var userDataStore = new Ext.data.Store({ 
      id: 'userDataStore', 
      autoSave: false, 
      batch: true, 
      proxy: new Ext.data.HttpProxy({ 
       api: { 
        read: '/Admin/Users/All', 
        create: '/Admin/Users/Save', 
        update: '/Admin/Users/Save' 
       } 
      }), 
      reader: new Ext.data.JsonReader(
      { 
       root: 'Data',      
       idProperty: 'ID', 
       totalProperty: 'total', 
       successProperty: 'success', 
       messageProperty: 'message' 
      }, [ 
       { name: 'ID', type: 'string', allowBlanks: false }, 
       { name: 'NT_ID', type: 'string', allowBlank: false }, 
       { name: 'EMail', type: 'string', allowBlank: false }, 
       { name: 'Name', type: 'string', allowBlank: false }, 
       { name: 'Enabled', type: 'bool', allowBlank: false }, 
       { name: 'CurrentRoleCode', type: 'string', allowBlank: false}] 
      ), 
      writer: new Ext.data.JsonWriter(
      { 
       encode: false, 
       writeAllFields: true, 
       listful: true 
      }) 
     }); 

này được liên kết với một mạng lưới, và tôi có thể tải và lưu người dùng mà không vấn đề. Các nút lưu trông như thế này:

var saveButton = new Ext.Button({ 
      text: 'Save', 
      disabled: true, 
      handler: function() { 
       userDataStore.save();      
       pageState.ClearDirty(); 
       saveButton.disable(); 
      } 
     }); 

Tuy nhiên, khi tạo một người dùng mới, JSON POST cho người sử dụng được đăng tải đến điểm cuối dịch vụ REST giống như "Cập nhật", với sự khác biệt duy nhất là không có ID giá trị được đăng (vì một giá trị chỉ được đặt trong cửa hàng khi tải từ máy chủ).

Tính năng này hoạt động và tôi có thể tạo người dùng.

Dịch vụ lưu REST phát lại hàng đã tạo với ID cơ sở dữ liệu mới và tôi đã giả định rằng EXTJS sẽ tự động liên kết ID cơ sở dữ liệu được tạo mới với hàng. Điều này cho phép người dùng chỉnh sửa thêm hàng đó và gây ra cập nhật thay vì chèn.

Thay vào đó, hàng tiếp tục có ID người dùng trống, do đó, lưu bổ sung sẽ tạo một người dùng mới khác.

Vì vậy, một trong hai:

  • ExtJS có nghĩa vụ phải giải quyết được tạo ra hàng ID tự động và tôi chỉ làm điều gì đó sai.
  • Tôi phải tải lại theo cách thủ công lưới sau mỗi lần lưu với một cuộc gọi REST bổ sung.

Tôi đã xem tài liệu và diễn đàn của EXTJS, nhưng tôi không rõ ràng về cách tiếp cận thích hợp.

Ai đó có thể làm rõ?

EDIT: Tôi đã thử trả về thành công = True trong JSON để khớp với SuccessProperty, tuy nhiên điều này vẫn không có vẻ hoạt động.

EDIT # 2: Cho đến nay điều duy nhất tôi thấy rằng công trình đang làm "userDataStore.reload()" sau khi lưu, tuy nhiên vì tôi đã trả lại nội dung của cửa hàng sau khi lưu, tôi đã hy vọng rằng EXTJS sẽ hiểu điều đó và cập nhật các giá trị hàng.

Trả lời

-1

Bạn cần tải lại cửa hàng với thông số mới trong bộ xử lý savebtn như store.reload();

tất nhiên bạn có thể thêm params để tải hành động

2
 
    I've got an idea that may help you. Let't suppose that user added a new 
record in grid, in that moment add a new property newRecOrderNo to the record to 
identify the record after response. When user will post data to server after 
inserting you must get a new ID and associate it to newRecOrderNo 
(like Map<Integer,Integer>). Then return json object like that : 

{ 
    success : true, 
    newIdes : { 
      1 : 23, 
      2 : 34 
    } 
} 
 

Then when you get response do set proper IDs to records: 

    userDataStore.each(function(rec){ 
     if(rec.data.newRecOrderNo){ 
      rec.data.ID = response.newIdes[rec.data.newRecOrderNo]; 
      delete rec.data.newRedOrderNo; 
     } 
    }) 
 
}) 

1

Vâng, nó đặt id (và cũng có thể các lĩnh vực khác, nếu máy chủ trả về giá trị của họ sửa đổi), nếu tạo ajax backend trả về kỷ lục với thiết lập id, ít nhất là trong extjs 4.1. Bạn nên trả lại bản ghi đã chèn, với bộ id, dưới khóa 'gốc' làm từ điển json, trong ví dụ này là 'Dữ liệu', nghĩa là:

{ 
    "Data": { 
    "ID": 8932, 
    "NT_ID": 28738273, 
    ... 
    "CurrentRoleCode": "aaa", 
    }, 
    "success": true 
} 
Các vấn đề liên quan