2012-12-19 16 views
6

Tôi đã tìm thấy trên GitHub một ví dụ làm việc tốt cho dữ liệu ember dưới https://github.com/dgeb/ember_data_example và cố gắng mở rộng nó bằng tài nguyên lồng nhau ('has_many: comments'). Trong ví dụ ban đầu, một giao dịch mới được tạo ra mỗi khi chế độ xem chỉnh sửa được bật và nó được gửi/cuộn lại nếu chế độ chỉnh sửa bị bỏ đi.Ember-data: cách chia sẻ và cập nhật một đối tượng trong giao dịch giữa các hoạt động của bộ điều khiển?

Tôi di chuyển để thêm nhận xét mới vào content.comments Tôi không thể làm điều đó và có lỗi vì 'nội dung' đã có trong giao dịch (Lỗi: xác nhận không thành công: Khi bản ghi đã thay đổi, bạn không thể di chuyển nó vào một giao dịch khác).

Ý tưởng tôi cố gắng nhận ra sai và tôi phải thực hiện theo cách khác?

App.EditContactController = Em.Controller.extend({ 
    content: null, 

    addComment: function() { 
    // ERROR here: 
    this.get('content.comments').addObject(App.Comment.createRecord({body: ''})); 
    }, 

    enterEditing: function() { 
    this.transaction = this.get('store').transaction(); 
    if (this.get('content.id')) { 
     this.transaction.add(this.get('content')); 
    } else { 
     this.set('content', this.transaction.createRecord(App.Contact, {})); 
    } 
    }, 

    exitEditing: function() { 
    if (this.transaction) { 
     this.transaction.rollback(); 
     this.transaction = null; 
    } 
    }, 

    updateRecord: function() { 
    // commit and then clear the transaction (so exitEditing doesn't attempt a rollback) 
    this.transaction.commit(); 
    this.transaction = null; 
    } 
}); 

Trả lời

1

Tôi nghĩ rằng bạn có thể lấy cảm hứng từ những gì tôi đã làm: https://github.com/sly7-7/ember_data_example/commit/57ee7ea6ca44e3a2fbba96fff4ad088a8d786a3c

Có lẽ chỉ đơn giản là làm this.get('content.comments').createRecord({body: ''}) sẽ làm việc. Cuộc gọi này đề cập đến ManyArray.createRecord() và sử dụng giao dịch của chủ sở hữu của mối quan hệ để tạo bản ghi mới. xem https://github.com/sly7-7/data/blob/master/packages/ember-data/lib/system/record_arrays/many_array.js#L163

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