2016-01-29 13 views
7

Tôi biết chủ đề này đã được thảo luận xung quanh stackoverflow và các diễn đàn khác, nhưng tôi không thể tìm đúng cách để làm điều đó.Lưu nhiều mô hình cùng một lúc, với số lượng lớn

Tôi có một mô hình được gọi là "bài đăng" chứa thông tin bài đăng (người dùng, mô tả, v.v ...). Người dùng nhận được một vài bài đăng, đọc chúng và thực hiện các hành động trên chúng. Các bài đăng đến từ api của tôi khi tôi yêu cầu GET /api/posts/

Tôi cũng có một mô hình gọi là "trạng thái sau" nơi tôi lưu hành động của những người đang đọc bài đăng: khi họ thích, chia sẻ, bình chọn hoặc yêu thích bài đăng.

export default DS.Model.extend({ 
    post: belongsTo('post'), 
    user: belongsTo('user'), 
    liked: attr('boolean', { defaultValue: false }), 
    favourited: attr('boolean', { defaultValue: false }), 
    voted: attr('boolean', { defaultValue: false }), 
    shared: attr('boolean', { defaultValue: false }), 
}); 

Tôi đang tìm cách để ứng dụng ember lưu các mô hình hậu của mình với số lượng lớn, cũng giống như cách tôi nhận bài đăng hàng loạt. Trạng thái bài đăng sẽ được lưu bằng một cuộc gọi api POST /api/post-states/

Tôi đã đọc trong một cuộc thảo luận rằng cách tốt nhất là tạo bộ điều hợp tùy chỉnh, nhưng tôi không chắc chắn nên đặt gì vào nó để có thể làm điều đó ... có thể để tạo ra một hàm saveAllRecords()?

Giải pháp nào tốt nhất cho tôi?

Cảm ơn sự giúp đỡ của bạn!

+1

Bao giờ nhìn vào điều này: http://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload Hoặc một mảng của các bản ghi bạn có thể .invoke ('save') [không biết nếu tất cả điều này chỉ với một lần nhấn. Có thể phải ghi đè lên cửa hàng.scheduleSave] – Hillboy

Trả lời

1

Bạn có thể xem cách thực hiện ember-api-actions. Hãy xem build-urlone của các tệp có chứa phương pháp để thực hiện cuộc gọi ajax. Bạn về cơ bản có thể sao chép các phương pháp và sử dụng nó trong mô hình của bạn. Nhưng tôi nghĩ sẽ dễ dàng hơn khi sử dụng addon tại thời điểm này :)

+0

Tôi đã nhìn vào addon này và tôi không phải là một fan hâm mộ lớn của cách nó được xây dựng, nó không thực sự đáp ứng nhu cầu của tôi. – alexmngn

1

Tôi đã xem xét và có vẻ như không có cách nào phù hợp để làm điều này với Ember, nhưng tôi đã nghĩ ra điều gì đó 'không chắc chắn bao nhiêu của Ember Way nó được. Những gì bạn có thể làm là tạo một mô hình khác có chứa thuộc tính hasMany chứa các mô hình bạn muốn lưu trữ hàng loạt và sau đó thêm các mô hình đó vào mô hình vùng chứa và bạn có thể phát bằng trình nối tiếp/bộ điều hợp để có được thứ bạn muốn. Sau đây là cách nó sẽ làm việc:

Model (cho phép gọi nó là post-state-container)

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    postStates: DS.hasMany('post-state') 
}); 

Serializer

import DS from 'ember-data'; 
import Ember from 'ember'; 

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    postStates: { embedded: 'always' }, 
    }, 
    serializeIntoHash: function(data, type, record, options) { 
    Ember.$.extend(data, this.serialize(record, options)); 
    } 
}); 

Bạn có thể xoa bóp các tải trọng gửi đến máy chủ ở đây để phù hợp với những gì bạn cần cho bạn phụ trợ, bởi vì bạn sẽ nhận được một danh sách các đối tượng được nối tiếp post-state ở định dạng JSON từ this.serialize(record, options)

Bộ chuyển đổi

import DS from 'ember-data'; 

export default DS.RESTAdapter.extend({ 
    namespace: 'api', 
    urlForCreateRecord: function() { 
    return this.get('namespace') + '/post-states'; 
    }, 
}); 

Làm thế nào để sử dụng nó (có lẽ và hành động trong một tuyến đường hoặc điều khiển ở đâu đó)

let record1 = this.store.createRecord('post-state'); //These would be your populated records 
    let record2 = this.store.createRecord('post-state'); //These would be your populated records 
    let postStateContainer = this.store.createRecord('post-state-container'); 
    postStateContainer.get('post-state-container').pushObject(record1); 
    postStateContainer.get('post-state-container').pushObject(record2); 
    postStateContainer.save(); 

Tôi đã thử nghiệm này, và nó hoạt động. Tôi không chắc chắn nếu có một cách tốt hơn bằng cách sử dụng JSONApi hoặc một cái gì đó như thế

+0

Tôi thực sự muốn tránh làm điều đó mặc dù ... – alexmngn

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