2013-03-11 70 views
6

Tôi đã thực sự tìm kiếm và tôi đã không tìm thấy một ví dụ hợp lý về việc sử dụng trình nối tiếp để nhận các đối tượng từ một phản hồi JSON được định dạng khác. Lý do tôi không thay đổi định dạng của phản hồi JSON được nêu tại đây http://flask.pocoo.org/docs/security/#json-security.Ember Dữ liệu và ánh xạ các đối tượng JSON

Tôi không giỏi lắm với javascript, vì vậy tôi đã gặp khó khăn trong việc tìm hiểu các móc trong serialize_json.js hoặc có lẽ tôi nên sử dụng ánh xạ (tôi không biết). Vì vậy, đây là một ví dụ về phản ứng JSON của tôi cho nhiều đối tượng:

{ 
    "total_pages": 1, 
    "objects": [ 
    { 
     "is_completed": true, 
     "id": 1, 
     "title": "I need to eat" 
    }, 
    { 
     "is_completed": false, 
     "id": 2, 
     "title": "Hey does this work" 
    }, 
    { 
     "is_completed": false, 
     "id": 3, 
     "title": "Go to sleep" 
    }, 
    ], 
    "num_results": 3, 
    "page": 1 
} 

Khi ember dữ liệu cố gắng sử dụng này, tôi nhận được lỗi sau:

DEBUG: ------------------------------- 
DEBUG: Ember.VERSION : 1.0.0-rc.1 
DEBUG: Handlebars.VERSION : 1.0.0-rc.3 
DEBUG: jQuery.VERSION : 1.9.1 
DEBUG: ------------------------------- 
Uncaught Error: assertion failed: Your server returned a hash with the key total_pages but you have no mapping for it 

nào hoàn toàn làm cho khi bạn nhìn vào mã của tôi cho lưu trữ dữ liệu:

Todos.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: DS.RESTAdapter.create({ 
     mappings: {objects: "Todos.Todo"}, 
     namespace: 'api' 
    }) 
}); 

câu hỏi của tôi là làm thế nào để đối phó với total_pages, num_resultspage? Và theo thỏa thuận, tôi có nghĩa là bỏ qua vì vậy tôi chỉ có thể bản đồ mảng objects.

Trả lời

3

Tất cả các thuộc tính gốc bạn trả về trong kết quả JSON của bạn được ánh xạ tới DS.Model trong dữ liệu Ember. Bạn không nên trả lại các thuộc tính không được mô hình hoá hoặc bạn nên mô hình hóa chúng.

Nếu bạn muốn loại bỏ lỗi, bạn nên tạo mô hình trống cho các thuộc tính bạn không sử dụng.

Đọc thêm here

Tại sao bạn trả lại thuộc tính bạn không muốn sử dụng? Hay nó nằm ngoài tầm kiểm soát của bạn?

+2

Tôi sẽ trả về các thuộc tính không được tạo mô hình và tôi không muốn mô hình hóa chúng. –

+1

Tôi có thể sửa đổi phản hồi, nhưng tôi biết tôi có thể làm điều này với JSONSerializer. Tôi chỉ không biết làm thế nào. Tôi có nghĩa là đó là điểm của nó: để lấy JSON là 'không thường xuyên' và chuyển đổi nó thành dữ liệu nào đó có thể sử dụng. –

+0

@Willem de Wit - điều gì về thuộc tính _id và __v được cơ sở dữ liệu thêm vào? Chúng ta có cần mô hình hóa chúng không? – netpoetica

1

Ember khá cân nhắc về cách mọi thứ được thực hiện. Dữ liệu Ember cũng không ngoại lệ. Nhóm Ember làm việc hướng tới các tiêu chuẩn nhất định mà nó nghĩ là tốt nhất, theo ý kiến ​​của tôi, một điều tốt.

Khám phá this post nơi ember đang diễn ra. TL, DR bởi vì có rất nhiều triển khai khác nhau của các cuộc gọi api, họ đang nỗ lực để hỗ trợ các JSON API.

Từ sự hiểu biết của tôi, không có cách nào dễ dàng để làm những gì bạn đang yêu cầu. Đặt cược tốt nhất của bạn là viết bộ điều hợp tùy chỉnh của riêng bạn và được tuần tự hóa. Đây không phải là quá khó để làm, và đã được thực hiện trước đây. Tôi khuyên bạn nên có một cái nhìn tại các Tastypie adapter được sử dụng cho Python của Django Tastypie

1

Cách để thực hiện điều này là với một serializer tùy chỉnh. Nếu tất cả các dữ liệu của bạn sẽ được trả về từ máy chủ ở định dạng này, bạn chỉ đơn giản là có thể tạo ra ApplicationSerializer như thế này:

DS.RESTSerilizer.extend({ 
    normalizePayload: function(type, payload) { 
    delete payload.total_pages; 
    delete payload.num_results; 
    delete payload.page; 
    return payload; 
    } 
}); 

Điều đó sẽ cho phép Ember dữ liệu tiêu thụ API của bạn liền mạch.

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