2012-06-26 27 views
6

Tôi có một cửa sổ bật lên phương thức xuất hiện bất cứ khi nào một trình soạn thảo cố lưu một thành phần với một số giá trị (trường ngày tháng trong trường hợp này trong quá khứ).Anguilla - Cập nhật giá trị của trường từ cửa sổ bật lên?

Trong cửa sổ bật lên này, tôi hiển thị trình chỉnh sửa một vài tùy chọn (rất giống với hộp thoại "Mở mục chia sẻ" mặc định) và tổ hợp nút OK/Hủy. Khi hủy, tôi kích hoạt sự kiện "hủy" và trình chỉnh sửa quay trở lại màn hình chỉnh sửa, tất cả đều tốt ở đây. Trên "OK", tôi muốn thay đổi giá trị của trường để khớp với bất kỳ trình soạn thảo nào được chọn, sau đó lưu.

Tôi đã cố gắng sử dụng cách tiếp cận với FieldBuilder và mẫu Boris được đề cập trên this other topic nhưng tôi không thể truy cập trường từ hộp thoại bật lên của mình.

Bất kỳ đề xuất nào về cách tôi có thể truy cập và sửa đổi xml của mục (cũng có thể là một trang) từ cửa sổ bật lên phương thức?

EDIT: Mã được sử dụng trong getControlForFieldName

function getControlForFieldName(name) { 
    var fieldBuilder = $display.getView().properties.controls.fieldBuilder; 
    var fieldsContainer = fieldBuilder.properties.input; 
    var fieldsNode = fieldsContainer.getElement(); 
    var fieldContainer = $dom.getFirstElementChild(fieldsNode); 
    while (fieldContainer) { 
     var labelNode = $dom.getFirstElementChild(fieldContainer); 
     var fieldNode = $dom.getNextElementSibling(labelNode); 
     var control = fieldNode.control; 
     if (control.getFieldName() == name) { 
      return control; 
     } 
     fieldContainer = $dom.getNextElementSibling(fieldContainer); 
    } 
} 

EDIT # 2

Sau lời khuyên của Frank, và một số sự giúp đỡ từ Jaime & Frank ẩn, tôi đã nhận nó làm việc như sau:

  1. Cửa sổ bật lên được gọi từ Command Extension (Lưu & Đóng trong trường hợp của tôi)
  2. Các command.js xác định một xử lý sự kiện đó được gọi là ngày "submit" (== OK được nhấn)
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

Trong cửa sổ bật lên, tôi đang đi qua các mục được chọn (đó là một ID từ khóa) để xử lý sự kiện :

this.fireEvent("submit", { id: select.options[select.selectedIndex].value }); 

và bây giờ trở lại trong xử lý sự kiện _onPopupSubmit(e) tôi chỉ đọc e.data.id, tải từ khoá này, có được tính như ID & Tiêu đề, và cập nhật các siêu dữ liệu của mục sử dụng item.setMetadata ("mới siêu dữ liệu có giá trị được cập nhật ").

đơn giản :)

+1

Bạn có thể chia sẻ mã mà bạn có trong cửa sổ bật lên của mình không? Rất có thể bạn đang thiếu một 'parent.' ở đâu đó. –

Trả lời

4

Mã của bạn chạy trong một cửa sổ bật lên, vì vậy bất kỳ tài liệu tham khảo bạn thực hiện cho các biến toàn cục sẽ được lấy từ cửa sổ popup.

Vì vậy, khi bạn nhận được fieldBuilder:

var fieldBuilder = $display.getView().properties.controls.fieldBuilder; 

$ hiển thị là một tham chiếu đến một biến toàn cầu. Vì vậy, điều này thực sự tìm kiếm các FieldBuilder trong cửa sổ popup (mà không có một).

Để có được FieldBuilder của cửa sổ Component, bạn có thể lấy nó từ mở:

var fieldBuilder = opener.$display.getView().properties.controls.fieldBuilder; 

Bạn có thể muốn xem xét thực sự đi qua các giá trị cập nhật để hoặc là một chức năng gọi lại hoặc với một sự kiện (tùy chỉnh) tuy nhiên, điều đó làm cho cửa sổ bật lên của bạn ít phụ thuộc vào thủ thuật opener..

+0

Cảm ơn Frank, câu trả lời của bạn là một nửa những gì tôi cần :) sau một cuộc thảo luận ngắn - và dựa trên những hiểu biết của bạn - tôi đã trả lại kết quả cho trình xử lý sự kiện "gửi" của mình, tôi sẽ đăng câu trả lời đúng lập mã ngay bây giờ –

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