2013-06-28 34 views
7

Kịch bảnCập nhật một lĩnh vực trong một bản ghi dyanamically trong ExtJS

Tôi muốn cập nhật dữ liệu cột của kỷ lục đặc biệt trong lưới có cửa hàng với dữ liệu tĩnh. Đây là cửa hàng của tôi:

extend : 'Ext.data.Store', 
model : 'MyModel', 
autoLoad:true, 
proxy: { 
    type: 'ajax', 
    url: 'app/data/data.json', 
    reader: { 
     type: 'json', 
     root: 'users' 
    } 
}, 

data.json My

{ 
    'users': [{ 
     QMgrStatus: "active", 
     QMgrName: 'R01QN00_LQYV', 
     ChannelStatus: 'active', 
     ChannelName: 'LQYV.L.CLNT', 
     MxConn: 50 
    }] 
} 

Những gì tôi đang làm để cập nhật các bản ghi:

var grid = Ext.getCmp('MyGrid'); 
var store = Ext.getStore('Mystore'); 
store.each(function(record, idx) { 
    val = record.get('ChannelName'); 
    if (val == "LQYV.L.CLNT") { 
     record.set('ChannelStatus', 'inactive'); 

     record.commit(); 
    } 
}); 
console.log(store); 
grid.getView().refresh(); 

MY VẤN ĐỀ

Tôi đang nhận được bản ghi cập nhật tại đây.Đó không được phản ánh trong bảng điều khiển lưới của tôi. Lưới đang sử dụng cùng một cửa hàng cũ (tĩnh) .Đó là vấn đề của dữ liệu tĩnh? Hoặc tôi đang thiếu một cái gì đó hoặc đi đâu đó sai? Xin hãy giúp tôi với vấn đề này. Cảm ơn rất nhiều.

EDIT MY

Tôi tryng để mã màu cột dựa trên status.But đây tôi luôn nhận được status = "active" mặc dù tôi đang cập nhật các cửa hàng.

Những gì tôi đang cố gắng để làm trong lưới của tôi

{ 
    xtype: 'grid', 
    itemId: 'InterfaceQueueGrid', 
    id: 'MyGrid', 
    store: 'Mytore', 
    height: 216, 
    width: 600, 
    columns: [{ 
     text: 'QueueMgr Status', 
     dataIndex: 'QMgrStatus', 
     width: 80 
    }, { 
     text: 'Queue Manager \n Name', 
     dataIndex: 'QMgrName', 
     width: 138 
    }, { 
     text: 'Channel Status', 
     dataIndex: 'ChannelStatus', 
     width: 78, 
     align: 'center', 
     renderer: function(value, meta, record) { 
      var val = record.get('ChannelStatus'); 
      console.log(val); // Here I am always getting status="active". 
      if (val == 'inactive') { 
       return '<img src="redIcon.png"/>'; 
      } else if (val == 'active') { 
       return '<img src="greenIcon.png"/>'; 
      } 
     } 
    }, { 
     text: 'Channel Name', 
     align: 'center', 
     dataIndex: 'ChannelName', 
     width: 80 
    } { 
     text: 'Max Connections', 
     align: 'center', 
     dataIndex: 'MxConn', 
     width: 80 
    }] 
} 

Trả lời

9

Cách quyết liệt là định cấu hình lại lưới của bạn. Điều này có thể không phải là giải pháp cuối cùng của bạn, nhưng có thể bạn sẽ biết điều gì đang xảy ra.

Gọi

grid.reconfigure(store) 

thay vì

grid.getView().refresh(); 

sau khi thay đổi hồ sơ. Bạn cũng có thể sử dụng một store.commitChanges() duy nhất thay vì sử dụng record.commit() trên mỗi bản ghi.

+1

Cảm ơn Christoph. Tôi đã giải quyết nó bằng grid.bindStore (MyUpdatedStore); Nhưng giải pháp của bạn cũng đá.Thanks rất nhiều – Dev

+0

Được sử dụng grid.reconfigure (cửa hàng) - làm việc như một say mê! Cảm ơn! –

1

Các bạn đã thử commiting cửa hàng của bạn và tải lại nó?

Hãy thử cách này.

yourstorename.commitChanges(); 
yourstorename.reload(); 
+0

Thnks Shankar.Vui lòng xem xét chỉnh sửa của tôi.Tôi không nhận được giá trị của cửa hàng được phản ánh trong lưới của tôi. – Dev

7

Có thể đó chỉ là lỗi đánh máy, bạn chỉ định val trong điều kiện của mình. Hãy thử tính năng này (= để ==):

var grid = Ext.getCmp('MyGrid'); 
var store = Ext.getStore('Mystore'); 
store.each(function(record,idx){ 
     val = record.get('ChannelName'); 
     if(val == "LQYV.L.CLNT"){ 
     record.set('ChannelStatus','active'); 
     } 
     else { 
     record.set('ChannelStatus','inactive'); 
     } 
     record.commit(); 
}); 
console.log(store); 
grid.getView().refresh(); 
+0

Thanks.But vẫn còn tôi nhận được tình trạng như không hoạt động.Tôi vẫn nhận được val như không hoạt động trong renderer.It cột lưới của tôi là lấy giá trị cửa hàng cũ.Cảm ơn một lần nữa. – Dev

0

tôi giải quyết nó bằng cách sử

grid.bindStore(myupdatedstore); 

Như đã trình bày bởi @Christoph

grid.reconfigure(store) 

hoạt động tốt là tốt.