2012-05-13 26 views
8

Tôi đang cố gắng đạt được điều gì đó mà tôi đoán có một câu trả lời đơn giản nhưng bằng cách nào đó tôi không thể tìm thấy nó đọc mã nguồn của ember-data.Thiết lập gọi lại sau khi giao dịch đã cam kết

Tôi muốn kích hoạt một hành động sau khi một bộ sửa đổi cụ thể đã được cam kết với kho dữ liệu. Mã này của tôi hiện tại:

var transaction = App.store.transaction(); 
user = App.get('currentUser'); 
transaction.add(user); 
user.set('name', "Michael Jackson"); 
transaction.commit(); 
App.navigate('dashboard'); 

nỗ lực đầu tiên của tôi là thêm một người quan sát trên tài sản isDirty của thành viên này, nhưng a) nó không có vẻ thành ngữ và quan trọng hơn b) Tôi sẽ phải loại bỏ bằng tay quan sát rằng vào cuối cùng - đó là dễ bị lỗi nếu một số ngoại lệ tăng ở giữa và không bị loại bỏ, ví dụ.

Bất kỳ ý tưởng nào? Bạn sẽ làm điều này như thế nào?

Trả lời

6

Bạn có thể sử dụng didCreate và didUpdate trên mô hình. Tôi giả sử bạn có một mô hình người dùng, ví dụ như:

MyApp.User = DS.Model.extend({ 
    first: DS.attr('string'), 
    page: DS.attr('string'), 
    didUpdate: function() { 
    //Do something 
    }, 
    didCreate: function() { 
    //do something 
    } 
}); 
+0

Wow. Tôi cảm thấy thật ngu ngốc. Không tìm thấy điều này trước: | - nó đúng trên readme !! https://github.com/emberjs/data#record-lifecycle Cảm ơn !! – josepjaume

+7

Vấn đề là, logic này không thuộc về chính mô hình. Nó phải thuộc về bối cảnh cụ thể đó. Ember thời gian gần đây đã giới thiệu một callback sự kiện một lần mà có thể có ích trong trường hợp này: https://github.com/emberjs/ember.js/commit/1809e65012b93c0a530bfcb95eec22d972069745#L0R19 Vì vậy, tôi có thể dễ dàng: model.one ('didCreate', function() {whatever}); – josepjaume

+2

Tôi muốn tạo một hình ảnh AJAX-loader toàn cầu chỉ cuộn khi có một cam kết diễn ra, cho bất kỳ mô hình nào. Điều này có thể giải quyết như thế nào? –

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