2012-02-05 36 views
13

Từ một cửa hàng điển hình như thế nàyExtJS: Làm cách nào để lấy dữ liệu JSON thô từ Ext.data.Store?

Ext.define('User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'firstName', type: 'string'}, 
     {name: 'lastName', type: 'string'}, 
     {name: 'age',  type: 'int'}, 
     {name: 'eyeColor', type: 'string'} 
    ] 
}); 

var myStore = Ext.create('Ext.data.Store', { 
    model: 'User', 
    proxy: { 
     type: 'ajax', 
     url : '/users.json', 
     reader: { 
      type: 'json', 
      root: 'users' 
     } 
    }, 
    autoLoad: true 
}); 

Có thể để có được nguyên Json từ myStore?

Trả lời

17

gì về:

myStore.proxy.reader.rawData 
+0

Điều này không hoạt động trong 4.x xem giải pháp của tôi cho 4.x – Tenerezza

+1

@Tenerezza Vậy sự khác biệt là gì? Tất nhiên chúng tôi có thể truy cập dữ liệu chỉ sau khi dữ liệu được tải vào cửa hàng ... –

+0

Sự khác biệt là bạn cần phải đi theo store.getProxy(). GetReader(). RawData để truy cập dữ liệu. – Tenerezza

-1

Look như tôi tìm thấy giải pháp bằng cách hooking nghe sự kiện để lưu trữ dữ liệu:

var myStore = Ext.create('Ext.data.Store', { 
    ... 
    listeners: { 
    'load': { 
     fn: function(store, records, success, operations) { 
     Ext.each(records, function(rec) { 
      console.log(Ext.encode(rec.raw)); 
     }); 
     } 
    } 
    } 
    ... 
}); 
+1

Chỉ nhận dữ liệu từ nút json gốc chứ không phải phần còn lại của nút đó. – Tenerezza

4

Đã cho tôi lứa tuổi để tìm một giải pháp cho điều này, nhưng đây là một trong những giải pháp mà sẽ làm việc.

myStore .on({ 'load': function (store, records, successful) 
    { 
     console.log(store.getProxy().getReader().rawData); 
    } 
    }); 
1

Trình đọc proxy rawData/jsonData sẽ có thể truy cập được sau khi cửa hàng được tạo. Để truy cập vào nó thử những điều sau đây:

store.on('load', function() { 
    console.log('store.proxy.reader.jsonData'); 
    console.log(store.proxy.reader.jsonData); 
}, this, { single: true }); 
0

có thể, bạn có thể thử với điều này:

var json = Ext.JSON.encode(myStore.getRange()); 

cya!

11

Giải pháp được chấp nhận không hoạt động trong cấu hình của tôi: ExtJs 4.1 và lưới có proxy bộ nhớ - nó trở về trống sau khi tôi thêm các mục vào gird (và đối tượng cửa hàng phản ánh). Mã sau hoạt động để mã hóa nội dung lưu trữ thành chuỗi JSON:

var json = Ext.encode(Ext.pluck(store.data.items, 'data')); 

Chúc mừng!

+0

Trong khi giải pháp này hoạt động, nó dựa trên thuộc tính dữ liệu cá nhân và do đó không được đảm bảo để làm việc trong các bản phát hành tương lai của ExtJs. Thật không may là ExtJs không có một cách hỗ trợ để làm điều này. –

0
Ext.data.Store({.... 
      proxy: { 
         ... 
         reader: { 
         **keepRawData: true,** 
         type: 'json', 
         rootProperty: 'root', 
         successProperty: 'success' 
         } 
        } 
       }); 
Các vấn đề liên quan