2012-03-09 37 views
5

Có cách nào để ngăn chặn xác thực mô hình trong Backbone.js khi mô hình mới được tạo lần đầu tiên không?Ngăn mô hình Backbone.js xác thực khi lần đầu tiên được thêm vào bộ sưu tập

Trong ứng dụng của mình, tôi có một bộ sưu tập với số lượng mô hình tùy ý, được trình bày dưới dạng mục danh sách. Người dùng có thể nhấp vào một nút trên mỗi mục, sẽ chèn một mục trống mới bên dưới mục hiện tại. Mục trống không được xác thực, rõ ràng là vì tôi không muốn một mục trống được lưu sau này.

Không có cách nào để tôi biết những gì mặc định hợp lý có thể là khi tôi tạo mục mới, vì vậy việc chuẩn bị trước mô hình mới với dữ liệu hợp lệ dường như không phải là một tùy chọn.

Mọi đề xuất?

Cập nhật: Trong khi làm việc trên một vấn đề liên quan đến tiếp tuyến, tôi nhận ra rằng tôi đang sử dụng Backbone.js phiên bản 0.9.0. Khi phiên bản này được phát hành, những người khác có cùng một vấn đề tôi gặp phải và họ đã phàn nàn trong số this issue trên GitHub.

Xác thực được sửa đổi lần cuối trong 0.9.1 để sửa lỗi này. Thêm một mô hình (tạm thời) trống vào một tập hợp là một usecase trong thế giới thực hợp lệ. Bạn có thể xử lý mô hình mới, trống trong khung nhìn, nhưng nếu bạn đang quản lý một danh sách các mục như tôi, điều đó buộc bạn phải có một bộ sưu tập các khung nhìn mục (bao gồm cả khung nhìn trống) ngoài bộ sưu tập của bạn các mô hình hợp lệ. Đó là một giải pháp thực sự khó khăn cho một kịch bản khác đơn giản. Vui mừng điều này đã được cố định.

Trả lời

3

Bạn đang không được phép thêm các mô hình hợp lệ :)

Đào một chút trong mã nguồn Backbone (0.9.1 ít nhất) cho thấy rằng cơ chế có thể được phá vỡ bởi các tùy chọn thông qua phương pháp add bạn:

var Mod=Backbone.Model.extend({ 
    validate: function(attrs,opts) { 
     if (opts.init) return; 
     return "invalid"; 
    } 
}); 

var Col=Backbone.Collection.extend({ 
    model:Mod 
}); 

var c=new Col(); 
c.add({},{init:true}); 

console.log(c.length); 

Một Fiddle: http://jsfiddle.net/jZeYB/

Cảnh báo: nó có thể phá vỡ mọi thứ xuống dòng.

+0

Không thêm mô hình không hợp lệ có ý nghĩa về mặt lý thuyết, nhưng tôi không thể nghĩ ra cách tốt hơn để cho phép người dùng thêm hàng mới. Tôi đoán tôi có thể xử lý tất cả điều này trong giao diện, sau đó thêm mục vào bộ sưu tập khi nó hợp lệ, nhưng điều đó sẽ làm phức tạp nhiều khía cạnh khác của ứng dụng này. Ví dụ của bạn hoạt động rất tốt, nhưng khi tôi thử nó trong ứng dụng của tôi, tham số 'options' sẽ bị ghi đè với đối tượng' {silent: true} ', mà Backbone.js có vẻ tự động shoehorn. Tôi rất bối rối ngay bây giờ. –

+0

Bạn không nên thêm các mô hình không hợp lệ - chế độ xem sẽ bắt được thông báo 'lỗi' được gửi bởi xác thực trên mô hình và cho phép người dùng sửa đầu vào của họ hoặc hủy bỏ nó. Khi tôi lấy nội dung từ máy chủ của chúng tôi để lấy dữ liệu không hợp lệ, tôi chỉ cần thả nó xuống sàn (và gửi thư đến cơ sở ghi nhật ký Ajax của chúng tôi) vì các mô hình không hợp lệ trong bộ sưu tập là 'ý tưởng tồi' – tkone

2

Bạn có cần thêm mô hình vào bộ sưu tập ngay lập tức không? Tôi đoán rằng việc xác thực không thành công vì bạn thêm nó vào bộ sưu tập ngay lập tức.

Thay vào đó, khi nhấn nút, bạn chỉ có thể tạo dạng xem và kiểu trống. Khi mô hình xác nhận bạn thêm nó vào bộ sưu tập. Bạn sẽ cần một nút/cơ chế gửi trên hàng mới để thêm nó vào bộ sưu tập (yêu cầu xác thực tự động).

+0

Tôi sẽ cung cấp cho một shot. Tôi có lẽ có thể thêm các mục trong xử lý 'thay đổi' của mô hình, mà sẽ loại bỏ sự cần thiết cho một nút gửi. Nó sẽ được thêm vào khi trường mất tiêu điểm. Cảm ơn! –

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