2013-03-25 24 views
5

Tôi cố gắng để truy cập dữ liệu từ DashboardIndexController trong DashboardIndexViewTruy cập dữ liệu từ bộ điều khiển theo quan điểm trong didInsertElement

JP.DashboardIndexController = Ember.Controller.extend({ 
    users: [] 
}); 

Có thể truy cập người dùng trong JP.DashboardIndexView trong didInsertElement?

didInsertElement : function(){ 
    console.log(this.get("controller.users").objectAt(0)); 
} 

Đây là DashboardIndexRoute tôi:

JP.DashboardIndexRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 
    controller.set('users', JP.User.find()); 
    } 
}); 

Cảm ơn bạn

EDIT

console.log(this.get("controller.users").objectAt(0)); 

Returns dữ liệu chỉ khi tôi đi đến UsersIndex và sau đó trở lại DashboardIndex .. Tôi nghĩ rằng đó là someth ing với khởi tạo, nhưng tôi không biết, làm thế nào để sửa chữa nó.

Trả lời

9

Có, đây là cách truy cập danh sách người dùng.

Điều này xảy ra do DashboardIndexView được chèn vào DOM trước khi controller.users được điền bằng dữ liệu từ máy chủ.

Vì vậy, khi chế độ xem được hiển thị, controller.users vẫn còn trống và sẽ được điền không đồng bộ sau khi yêu cầu ajax kết thúc, sự cố là, didInsertElement đã được kích hoạt.

Để giải quyết vấn đề này, bạn cần truy cập controller.users từ móc khác. DidInsertElement là địa điểm sai, vì nó sẽ kích hoạt bất kể JP.User.find() tải xong hay chưa.

Bạn chỉ cần đảm bảo rằng nó sẽ kích hoạt lại khi JP.User.find() được tải ngay cả khi chế độ xem đã có trong DOM. Một cái gì đó như thế này:..

JP.DashboardIndexView = Ember.View.extend({ 
    didInsertElement: function() { 
    this.usersChanged(); 
    }, 
    usersChanged: function() { 
    if (!this.$()) { return; } // View not in DOM 
    console.log(this.get('controller.users')); 
    }.observes('[email protected]') 
}); 
+0

Tôi đang gặp khó khăn trong việc sở hữu tính trong 'usersChanged' ...' this.get ('điều khiển') nhận được ('model') nhận được ('chiều dài') ' cho tôi thấy các mô hình của tôi được nạp, nhưng 'this.get ('controller'). get ('total')' (thuộc tính được tính toán) trả về NaN. Bất kỳ ý tưởng? –

+0

cũng, điều này sẽ kích hoạt mỗi lần người dùng được tải. có kích hoạt khi tất cả người dùng được tải không? cảm ơn! –

+1

Tôi không có đủ thông tin để trả lời câu hỏi đầu tiên của bạn. Đối với câu hỏi thứ hai, bạn có thể thử lên lịch phương thức bằng cách sử dụng 'Ember.run.once'; xem https://gist.github.com/teddyzeenny/6029603 –

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