2010-05-25 21 views
5

Tôi xin lỗi trước thời hạn nếu tôi không yêu cầu này đúng .. rất khó để đưa vào từ những gì tôi yêu cầu ..XForms và nhiều đầu vào cho thẻ cùng một mô hình

tôi có mô hình XForms như:

<file> 
    <criteria> 
     <criterion></criterion> 
    </criteria> 
</file> 

Tôi muốn có nhiều hộp nhập văn bản tạo thẻ tiêu chí mới.

giao diện người dùng như:

<xf:input ref="/file/criteria/criterion" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input> 

<xf:input ref="/file/criteria/criterion" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input> 

<xf:input ref="/file/criteria/criterion" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input> 

Và tôi muốn đầu ra XML để trông như thế này (khi người dùng đã nhập vào thông tin):

<file> 
    <criteria> 
     <criterion>AAA</criterion> 
     <criterion>BBB</criterion> 
     <criterion>CCC</criterion> 
    </criteria> 
</file> 

Con đường tôi có nó doesn' t làm việc, vì nó thấy 3 trường đầu vào được tham chiếu tất cả đến cùng một thẻ tiêu chí. Làm cách nào để phân biệt?

Cảm ơn! Tôi hy vọng điều đó có ý nghĩa gì đó!

BEGIN EDIT FIRST

Cám ơn các câu trả lời cho hộp văn bản cơ bản!

Tuy nhiên, bây giờ tôi cần thực hiện việc này với hộp danh sách. Nhưng đối với cuộc sống của tôi, tôi không thể hiểu được làm thế nào. Tôi đọc ở đâu đó để sử dụng với xforms: chọn và bỏ chọn các sự kiện .. nhưng tôi không biết vị trí đặt chúng và những nơi tôi đã thử đã cho tôi hành vi rất kỳ lạ.

tôi hiện đang thực hiện như sau:

<xf:select ref="instance('criteria_data')/criteria/criterion" selection="" appearance="compact" > 
     <xf:label>Choose criteria</xf:label> 
     <xf:itemset nodeset="instance('criteria_choices')/choice"> 
      <xf:label ref="@label"></xf:label> 
      <xf:value ref="."></xf:value> 
     </xf:itemset> 
    </xf:select> 

Tuy nhiên khi nhiều lựa chọn được gửi, song mọi giá trị lựa chọn được đưa vào cùng một nút, cách nhau bằng dấu cách.

Ví dụ:

Nếu AAA và BBB và FFF đã được lựa chọn từ hộp danh sách, nó sẽ cho kết quả trong XML sau:

<criterion>AAA BBB FFF</criterion> 

Làm thế nào để thay đổi mã của tôi để có mỗi lựa chọn được trong một nút riêng biệt?

ví dụ: tôi muốn nó trông như thế này:

<criterion>AAA</criterion> 
<criterion>BBB</criterion> 
<criterion>FFF</criterion> 

Cảm ơn!

END FIRST EDIT

BEGIN EDIT THỨ HAI:

Đối với listboxes (tức xf: chọn xuất hiện = "nhỏ gọn") tôi đã kết thúc cho phép không gian để xảy ra trong cùng một nút và sau đó chỉ cần chuyển đổi xml đó bằng cách sử dụng xsl để tạo một tài liệu xml mới được định dạng đúng (với các nút riêng lẻ riêng biệt). Thật không may, tôi đã không tìm thấy một giải pháp ít rườm rà hơn bằng cách chèn chúng ban đầu vào các nút riêng biệt.

Câu trả lời được chọn hoạt động rất tốt cho các hộp văn bản, do đó, tại sao tôi chọn nó làm câu trả lời.

END THỨ HAI EDIT

Trả lời

2

Nếu ba tiêu chí là đủ cho bạn, sau đó bạn nên sử dụng chỉ số trong ngoặc đơn:

<xf:input ref="/file/criteria/criterion[1]" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input> 

<xf:input ref="/file/criteria/criterion[2]" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input> 

<xf:input ref="/file/criteria/criterion[3]" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input> 

Nhưng nếu bạn sử dụng xf: lặp lại thay vào đó, bạn có thể thêm bao nhiêu tiêu chí bạn cần:

<xf:group ref="/file/criteria" mode="select_data"> 
    <xf:repeat nodeset="criterion"> 
     <xf:input ref="."> 
      <xf:label>Select</xf:label> 
     </xf:input> 
    </xf:repeat> 
    <xf:trigger> 
     <xf:label>Insert new row</xf:label> 
     <xf:insert nodeset="criterion" position="after" at="last()" ev:event="DOMActivate"/> 
    </xf:trigger> 
    <xf:trigger> 
     <xf:label>Delete last row</xf:label> 
     <xf:delete nodeset="criterion" at="last()" ev:event="DOMActivate" /> 
    </xf:trigger> 
</xf:group> 

Hãy coi chừng: ví dụ này lặp lại cần đánh bóng để bạn không thể xóa hàng cuối cùng bảng và có thể ẩn hàng cuối cùng, trùng lặp khi bạn chèn một hàng mới. Xem http://en.wikibooks.org/wiki/XForms#Tabular_and_Repeating_Data để biết thêm ví dụ.

+0

Cảm ơn! Điều này hoạt động thực sự tốt với các hộp văn bản của tôi. Tôi giả sử tôi có thể làm điều gì đó tương tự với hộp kết hợp sau đó? (nghĩa là chọn nhiều thứ từ hộp tổ hợp và biến những thứ đó thành tiêu chí mới). – developer

+0

@iHeartGreek, đúng vậy. Bạn có thể có bất cứ điều gì bạn muốn bên trong ''. – avernet

+0

Tôi đã thử giải pháp này làm việc với hộp danh sách (sử dụng xforms: select) nhưng tôi không thể tìm ra. Tôi cũng đọc rằng tôi nên sử dụng xforms: chọn và bỏ chọn các sự kiện nhưng tôi chỉ có hành vi kỳ lạ với điều đó. (Xem chỉnh sửa của tôi ở trên để biết thêm ngữ cảnh về vấn đề mới của tôi) – developer