2011-08-12 25 views
7

Tôi đang cố gắng xây dựng một ứng dụng biên tập liên hệ đơn giản trong Backbone.js và tôi đã gặp phải một chút vấn đề mà tôi không biết cách giải quyết vì tôi chưa quen với Backbone.js.Làm cách nào để hiển thị danh sách chọn (thả xuống) cho thuộc tính Mô hình trong BackboneJS?

Tôi có Mẫu Contact và mục đó có trường ProductLineID (mỗi Địa chỉ liên hệ có một Dòng sản phẩm được liên kết với). Trong việc hiển thị trình soạn thảo cho Liên hệ này, tôi muốn hiển thị một danh sách thả xuống với các tùy chọn ProductLine có thể và đặt nó vào giá trị hiện tại. Làm thế nào tôi sẽ làm điều đó trong Backbone.js?

Tôi biết làm thế nào để làm điều đó trong knockout.js với dữ liệu ràng buộc:

<select id="ProductLineID" name="ProductLineID" 
     data-bind="options: productLineOptions, 
     optionsValue: 'ID', 
     optionsText: 'Name', 
     value: ProductLineID, 
     optionsCaption: 'All'"> 
</select> 

Trong ví dụ này productLineOptions là một đối tượng JSON đã được cài đặt sẵn trên trang.

Điều đó sẽ thực hiện chính xác những gì tôi muốn, nhưng tôi không biết cách thực hiện tương đương trong Backbone.js.

Tôi có thể cung cấp thêm mã từ ví dụ thực tế của tôi, nhưng điều này có vẻ như nó là một ví dụ nhỏ và không yêu cầu mã cụ thể.

+0

Bạn đã đạt được điều đó chưa ?? Làm cách nào bạn quản lý hiển thị 'Giá trị được chọn mặc định', tức là' giá trị: ProductLineID' ?? – Shubh

Trả lời

13

giống như sau sẽ làm việc nếu bạn sử dụng underscore templates:

<select id="ProductLineID" name="ProductLineID"> 
    <option value="">--select a product line--</option> 
    <% _(productLineOptions).each(function(pl) { %> 
     <option value="<%= pl.ID %>"><%= pl.Name %></option> 
    <% }); %> 
</select> 

Và sau đó bạn sẽ chỉ phải chắc chắn rằng bạn thông qua trong đối tượng productLineOptions vào bối cảnh của mẫu.

+0

là có một cách để kết hợp này với xây dựng trong rendering của một cái nhìn trong xương sống? – samandmoore

+1

Hiển thị chế độ xem dựng sẵn của Backbone không làm bất kỳ điều gì, theo nghĩa đen. Vì vậy, bạn có thể làm một cái gì đó như: (1) đặt ở trên vào một mẫu (2) trong hàm 'render' của bạn gọi mẫu với ngữ cảnh chính xác' render: function() {this.template ({productLineOptions: productLineOptions}); trả lại điều này; } ' – satchmorun

+0

Tôi gặp vấn đề khác khi tôi thêm thuộc tính 'đã chọn' vào mẫu, nhưng nó luôn chọn thuộc tính đầu tiên, ngay cả khi một tùy chọn khác đã được chọn được chọn. – Kyleinincubator

4

Backbone.js không thực hiện databinding ra khỏi hộp, như Knockout. Nó rời khỏi khía cạnh đó đối với nhà phát triển để làm tuy nhiên họ muốn. Cách cơ bản là thiết lập trình xử lý sự kiện để thay đổi.

Nếu bạn muốn làm kiểu dữ liệu loại trực tiếp, có một dự án có thể hỗ trợ những gì bạn cần.

https://github.com/derickbailey/backbone.modelbinding

+0

Tôi hiểu rằng xương sống không cung cấp cùng một loại chức năng liên kết dữ liệu nội tuyến, nhưng có cách nào được đề xuất để thực hiện điều tương tự bằng cách sử dụng xương sống không? Tôi có lẽ sẽ cung cấp cho các plugin modelbinding một thử, nhưng với tôi đó không phải là một cách "thực sự" xương sống "hoàn thành nó. – samandmoore

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