2011-11-02 37 views
6

Tôi có một cửa hàng với một proxy và json ajax đọc ExtJS:đọc ExtJS nhắn từ cửa hàng ajax

Ext.create('Ext.data.Store', { 
    proxy: { 
     type: 'ajax', 
     url: '...', 
     reader: { 
      type: 'json', 
      root: 'data', 
      totalProperty: 'totalCount', 
      messageProperty: 'message', 
      successProperty: 'success' 
     }, 
    ... 

Đây là những gì tôi nhận được từ máy chủ:

data: [...] 
message: "I want to read this string after the store is loaded" 
success: true 
totalCount: x 

Bây giờ tôi muốn truy cập 'thông điệp' khi cửa hàng được tải - tôi lấy nó ở đâu? Tôi nhìn rất nhiều nhưng tôi không thể tìm thấy một nơi để móc vào? Người nghe duy nhất trong proxy là ngoại lệ, điều đó không thực sự giúp tôi.

Trả lời

5

cửa hàng sử dụng load sự kiện:

Ext.create('Ext.data.Store', { 
    listeners: { 
    'load': function(store, records, successful, operation) { 
     alert(operation.resultSet.message); 
    } 
    }, 
    proxy: { 
    // ... 

CẬP NHẬT

Dường như tài liệu hướng dẫn cho sự kiện tải là sai. Danh sách các đối số chính xác là (store, records, successful) (không có đối số hoạt động). Do đó giải pháp trên không hiệu quả.

Tuy nhiên có là tài sản rawData đọc của mà có thể giúp:

Ext.create('Ext.data.Store', { 
    listeners: { 
    'load': function(store, records, successful) { 
     alert(store.getProxy().getReader().rawData.message); 
    } 
    }, 
    proxy: { 
    // ... 
+0

Cảm ơn, tôi đã cố gắng nghe tải tất nhiên, nhưng tôi không biết 'resultSet' đi vào hoạt động. Nhưng dù sao các đối tượng hoạt động chỉ chứa các phương pháp lắng nghe cửa hàng (tôi có beforeload và tải) và khi tôi cố gắng truy cập resultSet nó là không xác định. Tôi sử dụng ExtJS 4.0.2a. Bất kỳ ý tưởng? Giải pháp của bạn sẽ được hoàn hảo - nếu nó sẽ làm việc trong dự án của tôi :) Phiên bản nào của ExtJS bạn đang sử dụng? – Marc

+0

@Marc, một cách kỳ lạ nhưng có vẻ như đối số hoạt động không được chuyển vào trình xử lý sự kiện tải (Nhưng các tài liệu nói nó nên được thông qua). Tuy nhiên tôi đã tìm thấy một giải pháp khác. Đã cập nhật câu trả lời của tôi. –

+0

Tuyệt vời, cảm ơn bạn rất nhiều, đó là nó! – Marc

0

câu trả lời của tôi áp dụng cho ExtJs 4.1.x. Tôi đã dành một chút thời gian đọc mã và có vẻ như một cách để làm điều này là cung cấp một cuộc gọi lại trong sự kiện lưu trữ beforeload thay vì xử lý sự kiện tải. Gọi lại được thông qua đối tượng hoạt động sẽ chứa các tham số yêu cầu ban đầu và trong trường hợp thành công, nó sẽ chứa đối tượng phản hồi và dữ liệu (được phân tích cú pháp) trong thuộc tính resultsSet.

0

Trong trường hợp khác:

myStore.load({ 
    callback : function(object, response, success) { 
    // on error response: success = false 
    if(!success) { 
     // i don't remember de correct path to get "message" or "responseText" 
     console.log(response.response.responseText); 
    } else { 
     ... 
    } 
}); 

cya!

0

Tôi nhận được thông báo theo cách sau mặc dù tôi nạp bằng tay và không sử dụng các sự kiện ở đây:

var initData = Ext.create('My.data.SomeAjaxStore'); 

initData.load(function(records, operation, success) { 
    if (!success || operation.hasException()) { 
    // Here is your message from server 
    // In case of HTTP error you get: 
    // { 
    // status: 404, 
    // statusText: "Not Found" 
    // } 
    var error = operation.getError(); 
    Ext.log({msg:[Ext.getClassName(me), ": Command failure: ", error].join(""), level:"error"}); 
} 
Các vấn đề liên quan