2012-05-19 27 views
5

Khi tôi đang cố gắng để tải dữ liệu từ đường ray db với emberjs + dữ liệu ember Tôi nhận được lỗi nàyEmberjs + dữ liệu + đường ray - Loại lỗi chưa gặp: Không thể gọi phương thức 'bản đồ' không xác định

Uncaught TypeError: Cannot call method 'map' of undefined

Đây là coffescript mã:

window.Cosmetics = Ember.Application.create 

Cosmetics.store = DS.Store.create 
    revision: 4 
    adapter: DS.RESTAdapter.create 
    bulkCommit: false 

Cosmetics.admin_user = DS.Model.extend({ 
    name: DS.attr('string') 
    email: DS.attr('string') 
}); 

Cosmetics.view = Ember.View.extend 
    templateName: 'ember/views/aaa' 

Cosmetics.admin_user.reopenClass 
    url: 'admin/user' 

Cosmetics.store.findAll(Cosmetics.admin_user) 

Trình điều khiển nhận dữ liệu JSON thích hợp. Tôi đã thử lập bản đồ mã từ các ví dụ được tìm thấy trên internet nhưng không có gì hữu ích. Bất kỳ ý tưởng? Tôi đoán tôi đang làm sai. Cảm ơn trước sự giúp đỡ nào.

+0

Bạn có thể đăng một ví dụ về đối tượng được trả về từ máy chủ không? Ngoài ra còn có một lỗi với các phiên bản cũ của ember và các phiên bản mới hơn của dữ liệu sẽ kích hoạt lỗi trên, bạn đang sử dụng phiên bản nào của ember? –

+0

@CoryLoken Đây là đối tượng mẫu được trả về bởi đường ray - [đối tượng được trả lại] (http://pastebin.com/Ttp09BAa). Giới thiệu về phiên bản emberjs, tôi đang sử dụng phiên bản được chuyển bằng đá quý ember-ray, nhưng ở bên an toàn, tôi đã thử sử dụng ** mới nhất ** được tải xuống từ github (0.9.7.1) nhưng không thành công. – thyforhtian

+0

Có cùng một vấn đề với phiên bản emberjs được đóng gói với các đường ray ember 0.6.0 –

Trả lời

3

ember dữ liệu dự đoán kết quả FindAll để được lồng vào nhau dưới hình thức số nhiều của mô hình:

gì ember dữ liệu dự kiến:

{ 
    "users": [ 
     { 
      "activated": null, 
      "created_at": "2012-05-14T19:35:44Z", 
      "email": "[email protected]", 
      "id": 1, 
      "name": "john doe", 
      "updated_at": "2012-05-15T20:23:06Z" 
     } 
    ] 
} 

gì nó là nhận được trong ví dụ của bạn:

[ 
    { 
     "activated": null, 
     "created_at": "2012-05-14T19:35:44Z", 
     "email": "[email protected]", 
     "id": 1, 
     "name": "john doe", 
     "updated_at": "2012-05-15T20:23:06Z" 
    } 
] 

Cụ thể, lỗi xuất phát từ ember nhận phản hồi JSON và chạy "bản đồ" trên mọi thứ trong khóa "người dùng", trong trường hợp của bạn không tồn tại, do đó "bản đồ" đang được được gọi là "không xác định".

+1

Tôi e là không phải vậy. Tôi đã thử điều đó bằng cách thêm một biểu tượng ': users' vào' respond_with' trong bộ điều khiển để nhận được phản hồi lồng nhau nhưng vẫn là lỗi tương tự. Nó tiếp tục phá vỡ 'ids = hashes.map (hàm (băm) {...}' trong ember-data-latest.js. – thyforhtian

3

Tôi gặp vấn đề tương tự. Điều gì đã giải quyết nó cho tôi là thêm nút gốc khi hiển thị JSON trong hành động index trong bộ điều khiển của tôi. Đó có nghĩa là thay đổi dòng này:

format.json { render json: @things } 

này:

format.json { render json: { things: @things }} 

Đó là bởi vì Ember dữ liệu đòi hỏi các nút gốc trong đối tượng JSON, nhưng Rails không bao gồm nó theo mặc định.

Tôi hy vọng điều đó sẽ hữu ích.

+0

Đó là nhiều hơn hoặc ít hơn những gì @tvon đề xuất. Nó có vẻ là vấn đề nhưng thêm nút gốc không giúp đỡ (không may) Cảm ơn anyway – thyforhtian

+0

Đó là rất lẻ sau đó.Bạn đã thử gỡ lỗi nó? Bạn chắc chắn rằng bạn đang có phiên bản mới nhất? –

+0

Giúp tôi trong một tình huống tương tự - cảm ơn! – novemberkilo

0

Cuối cùng tôi đã tìm ra giải pháp!

Tôi không chắc chắn nếu điều này nên được thực hiện theo cách này nhưng nó là đủ để thoát khỏi cam kết số lượng lớn. Vì vậy, cửa hàng trông như thế nào là:

Cosmetics.store = DS.Store.create 
    revision: 4 
    adapter: DS.RESTAdapter.create 

bulkCommit: false gây ra lỗi Uncaught TypeError: Cannot call method 'map' of undefined.

Sự cố này dường như chỉ liên quan đến dữ liệu ember khi được sử dụng trong ứng dụng đường ray.

Tôi dường như đã vội vã một chút như những gì dường như giải quyết được vấn đề, gây ra các bà mẹ;

3

Tìm thấy sự cố, không chắc chắn về giải pháp.

Nếu nguồn của bạn đang được phục vụ dưới một không gian tên, ví dụ:

App.Event = DS.Model.extend({ 
    name: DS.attr('string'), 
}); 

App.Event.reopenClass({ 
    url: 'api/event' 
}) 

Khi ember dữ liệu phân tích các phản ứng json, nó làm điều gì đó như json[plural] trong findAll mà nên json['events'], tuy nhiên số nhiều được tính là json['api/events'] và do đó là lỗi.Tôi sẽ hỏi xung quanh và có thể nâng một vé cho việc này.

Cập nhật

Tôi đã tạo một vé cho điều này here

Cách giải quyết

Là một hack, tôi đang làm điều này:

def index 
    respond_to do |format| 
    format.json { render json: { 'api/events': Event.all } } 
    end 
end 
0

Gốc nguyên nhân của vấn đề là hàm số nhiều trong rest_adapter.js do đó giải pháp là sửa chữa nó;)

DS.RESTAdapter.reopenClass({ 
    pluralize: function(name) { 
     if (!this.plurals[name]) 
     name = name.substring(name.lastIndexOf('/')+1); 

     return this.plurals[name] || name + "s"; 
    } 
    }); 
Các vấn đề liên quan