2012-01-19 31 views
6

tôi có một cửa hàng:Tải lại dữ liệu từ một cửa hàng ở ExtJS 4

var store = new Ext.data.store({ 
       autoLoad: true, 
       autoSync: true, 
       model: 'myModel', 
       proxy: { 
        type: 'rest', 
        url: '/url/to/my/json/encoded/results', 
        reader: { 
         type: 'json', 
         root: 'results' 
        }, 
        writer: { 
         type:'json' 
        } 
       } 
      }); 

Đó là các cửa hàng đối với một số lưới trong đó tôi hiển thị các kết quả. lưới của tôi được cấu hình như sau:

var myGrid = new Ext.grid.Panel({ 
       id:'myGridID', 
       layout:'anchor', 
       border:false, 
       title:'My Grid', 
       width:412, 
       store:store, 
       heigth:300, 
       frame:false, 
       .... etc 

Tại một số điểm tôi thêm một mục vào cơ sở dữ liệu của tôi, mà chỉ hoạt động tốt (nếu tôi tải lại trang tôi thấy kỷ lục mới được thêm vào trong lưới của tôi). Những gì tôi muốn làm là tải lại lưới vì vậy khi tôi lưu mục nhập đó vào cơ sở dữ liệu của tôi, cửa hàng và lưới làm mới bản thân và hiển thị bản ghi mới được thêm mà không cần phải tải lại toàn bộ trang.

tôi đã cố gắng:

Ext.getCmp('myGridID').getStore().reload(); 

và ...

Ext.getCmp('myGridID').getStore().load(); 

và ...

Ext.getCmp('myGridID').getView().refresh(); 

và tôi cũng đã cố gắng thiết lập các cửa hàng như Ext.data.JsonStore nhưng nó không làm gì cả.

Nhưng không có gì hiệu quả, tôi đã tìm kiếm trên toàn bộ internet vì điều này không thành công.

Mọi trợ giúp đều được đánh giá cao.

+1

gì xảy ra khi bạn cố gắng chạy chỉ: 'myGrid.getStore() tải();' – Chewpers

+1

'Ext.getCmp ('myGridID') getStore() tải(); 'nên làm việc –

+0

.. Có lẽ nó tải lại cửa hàng, nhưng tôi vẫn phải tải lại trang web để xem bản ghi mới trong lưới – lascort

Trả lời

15

này chắc chắn sẽ làm việc:

Ext.getCmp('myGridID').getStore().load(); 

Bạn đang nhận được bất kỳ lỗi javascript khi bạn sử dụng cú pháp trên? Nếu vậy, nhìn thấy thông báo lỗi cụ thể có thể đưa ra một số manh mối.

Ngoài ra, LUÔN LUÔN LUÔN LUÔN sử dụng các công cụ dành cho nhà phát triển Chrome (hoặc Firebug hoặc Thanh công cụ dành cho nhà phát triển IE nếu bạn yêu thích Firefox/IE). Trong trường hợp này, bạn muốn xem liệu một yêu cầu AJAX có được chuyển tới/url/to/my/json/encoded/results hay không. Điều đó ít nhất sẽ cho bạn biết nếu các cuộc gọi để làm mới cửa hàng là làm cho nó vào máy chủ của bạn.

Đoán của tôi là không, và bạn rất có thể có thông báo lỗi được tạo. Có lẽ một cái gì đó dọc theo dòng "Không thể gọi phương thức 'getStore' của undefined"

Điều này ít nhất sẽ cho bạn biết rằng bạn không thành công có được một tham chiếu đến lưới của bạn. Từ đó, hãy kiểm tra để đảm bảo rằng bạn không sao chép "myGridID" cho một phần tử khác hoặc điều gì đó ngớ ngẩn như vậy.

Bạn có thể ra một số thông tin cho Chrome công cụ phát triển giao diện điều khiển để giúp gỡ rối, bắt đầu với:

console.log(Ext.getCmp('myGridID')); 

Xem nếu nó không xác định, hoặc trả về một tham chiếu đến lưới điện. Nếu không xác định được thì có thể bạn đang sao chép id hoặc có thể cố gắng tải lại lưới trước khi thành phần thực sự được tạo (xem mã của bạn trong ngữ cảnh lớn hơn của ứng dụng sẽ giúp xác định điều đó).

Nếu nó trả về thành công một tham chiếu đến thành phần lưới, sau đó tiếp tục đi xuống dòng:

console.log(Ext.getCmp('myGridID').getStore()); 

Dù sao, đó có thể là quá nhiều lời giải thích cho một cái gì đó bạn có lẽ đã giải quyết bằng cách bây giờ. Có lẽ nó sẽ hữu ích cho người khác mặc dù.

0

thấy mã của tôi:

var phản ứng = Ext.decode (kết quả); // JSON từ một nơi nào đó

store.proxy = new Ext.ux.data.PagingMemoryProxy (response);

grid.store = store;

store.load ({params: {start: 0, limit: 20}});

grid.getView(). Refresh();

2

nếu bạn muốn tải lại dữ liệu của mình, bạn phải xem các thay đổi. Ý tôi là, hãy đặt mã này lại với nhau:

Ext.getCmp('idMyGrid').getStore().load(); 
Ext.getCmp('idMyGrid').getView().refresh(); 

Điều này phù hợp với tôi. Tôi hy vọng rằng công trình cho bạn quá.

Từ Chile chorizo, Xà phòng.

9

Hãy thử điều này nó làm việc cho tôi thử nghiệm trên phiên bản 3.x

Ext.getCmp ('idMyGrid') store.load().

bạn cũng có thể sử dụng

Ext.getCmp ('idMyGrid') store.reload().

nếu bạn muốn truyền tham số với yêu cầu cửa hàng tải

Ext.getCmp ('idMyGrid') store.load ({params: {paramName: paramValue}}). Ext.getCmp ('idMyGrid'). Store.reload ({params: {paramName: paramValue}}); .

Các vấn đề liên quan