2013-08-27 26 views
5

Backbone documentation nói,Backbonejs - Tránh phân tích cú pháp sau khi lưu

phân tích cú pháp được gọi là bất cứ khi nào dữ liệu của mô hình được trả về bởi máy chủ, trong lấy, và lưu lại. Hàm được chuyển qua đối tượng phản hồi thô và sẽ trả về hàm băm thuộc tính được đặt trên mô hình.

Nhưng tôi có chức năng phân tích cú pháp tùy chỉnh cho mô hình của tôi. Tôi muốn thực hiện nó chỉ khi tôi lấy dữ liệu không khi tôi lưu dữ liệu.

Có cách nào để làm điều đó không? Tôi có thể kiểm tra phản ứng của tôi bên trong chức năng phân tích cú pháp. Nhưng có bất kỳ tùy chọn tích hợp nào để làm điều đó không?

+0

có thể trùng lặp: [tại đây] (http://stackoverflow.com/q/18243514/722238). Ngoài ra, hãy xem [this] (https://github.com/jashkenas/backbone/pull/2551). – fbynite

Trả lời

7

Đây là từ xương sống source file liên quan đến tiết kiệm một mô hình:

var model = this; 
var success = options.success; 
options.success = function(resp) { 
    model.attributes = attributes; 
    var serverAttrs = model.parse(resp, options); 
    if (options.wait) serverAttrs = _.extend(attrs || {}, serverAttrs); 
    if (_.isObject(serverAttrs) && !model.set(serverAttrs, options)) { 
     return false; 
    } 
    if (success) success(model, resp, options); 
    model.trigger('sync', model, resp, options); 
}; 

Bạn có thể vượt qua một tùy chọn tùy chỉnh trên save của bạn như: model.save(null, { saved: true }), sau đó trong tùy chỉnh của bạn parse:

parse: function(response, options) { 
    if (options.saved) return this.attributes; 
    // do what you're already doing 
} 

tôi thiên đường 't thử nghiệm này ở tất cả, nhưng nó ít nhất sẽ giúp bạn bắt đầu.

+0

các công trình tuyệt vời tuyệt vời. cảm ơn. – user10

4

Chỉ cần chuyển phân tích cú pháp: giả vào phương thức lưu dưới dạng tùy chọn.

m = new MyModel() 
s.save(null, {parse: false}) 
Các vấn đề liên quan