2009-04-17 38 views
6

Tôi chỉ mới bắt đầu với thang máy và bây giờ tôi đang cố gắng thay đổi một biểu mẫu bình thường thành dạng ajax nhưng phương pháp processEntryAdd không bao giờ được gọi.Khung tăng Scala, biểu mẫu ajax gửi nhiều giá trị?

def addUser(xhtml : Group) : NodeSeq = { 

    var firstName = "" 
    var lastName = "" 

    def processEntryAdd() { 
     Log.info("processEntryAdd: " + firstName + ", " + lastName) 
    } 

    SHtml.ajaxForm(
     bind("entry", xhtml, 
      "firstName" -> SHtml.text(firstName, 
       (x) => { 
        Log.info("Setting firstName to " + x); 
        firstName = x 
       }), 
      "lastName" -> SHtml.text(lastName, 
       (x) => { 
        Log.info("Setting lastName to " + x); 
        lastName = x 
       }), 
      "submit" -> SHtml.submit("Add user", processEntryAdd), 
     )) 
} 

Bất kỳ ý tưởng nào về cách đạt được những gì tôi đang cố gắng làm hoặc tại sao mã ở trên không hoạt động. Giá trị của hai trường biểu mẫu được gửi khi nút được nhấn và hai biến cục bộ firstNamelastName được đặt nhưng chức năng được liên kết với SHtml.submit không được gọi.

Cảm ơn!

Trả lời

1

Trả lời câu hỏi này David Pollak đề nghị sử dụng

"submit" -> SHtml.hidden ("Thêm người dùng", processEntryAdd) ++

trong danh sách nâng gửi thư.

+0

Và điều đó có hiệu quả nhưng tiếc là không không giải quyết toàn bộ vấn đề. Một phần của câu đố mà tôi vẫn còn thiếu là tái dựng hình một phần của trang sau khi trả lời ajax. – ivans

9

Câu hỏi này là loại cũ, nhưng gần đây tôi cần phải biết điều này bản thân mình, và đây là giải pháp tốt nhất mà tôi đã nhìn thấy cho đến nay:

ajaxForm(
    bind("entry", xhtml, 
     "firstName" -> text(firstName, firstName = _), 
     "lastName" -> text(lastName, lastName = _), 
     "submit" -> submit("Add user", processEntryAdd _), 
    ) ++ hidden(processEntryAdd _) 
) 

Bằng cách thêm vào quá trình xử lý mẫu yếu tố ẩn bạn giữ nút gửi, mà không thay đổi bất kỳ mã xem nào.

Bạn có thể thêm hành vi phía khách hàng bằng cách processEntryAdd() trả về một JsCmd:

def processEntryAdd() { 
    Log.info("processEntryAdd: " + firstName + ", " + lastName) 
    JsRaw("alert('process entry added')") 
} 
+0

Cảm ơn, đây có vẻ là một giải pháp dễ dàng, sẽ cố gắng sớm. – ivans

+0

Trong đoạn cuối, phải có một '=' để ngăn chặn 'processEntryAdd' tự động trở thành' Đơn vị'. – Owen

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