2012-06-03 28 views
13

Tôi cần triển khai thông báo xác thực xuất hiện ngay bên cạnh trường không hợp lệ. Bất kỳ trợ giúp sẽ được đánh giá cao.ExtJS4: Cách hiển thị thông báo lỗi xác thực bên cạnh hộp văn bản, hộp tổ hợp, v.v.

+0

này là thẳng ra các ví dụ. bạn sẽ được phục vụ tốt hơn thông qua chúng. – dbrin

+0

@DmitryB, cảm ơn bạn đã trả lời. Bạn có thể cung cấp cho tôi một số ví dụ không? Xin vui lòng đọc bình luận của tôi để JohnnyHK dưới đây. – berliner

+0

Tôi lấy lại bình luận của mình. Cách duy nhất để hiển thị thông báo lỗi đầy đủ ra khỏi hộp là với 'under' msgTarget - xem trường Điện thoại trong ví dụ này: http: //docs.sencha.com/ext-js/4-1/#!/example/form/fieldcontainer.html @Jomet bên dưới đã đề cập đến phần tử ID phù thủy là công việc nhiều hơn một chút nhưng đó là những gì bạn sẽ phải làm. – dbrin

Trả lời

13

msgTarget: 'side' sẽ Thêm biểu tượng lỗi ở bên phải của trường, hiển thị thông báo trong cửa sổ bật lên khi di chuột.

nếu bạn đọc tài liệu một cách cẩn thận, thêm một lựa chọn là có cho msgTarget http://docs.sencha.com/ext-js/4-1/#!/api/Ext.form.field.Text-cfg-msgTarget

[yếu tố id] Thêm thông báo lỗi trực tiếp đến innerHTML của phần tử cụ thể. bạn phải thêm "td" vào bên phải của điều khiển động với id. sau đó nếu bạn chỉ định msgTarget: 'element id' nó sẽ hoạt động.

6

Xem cấu hình của điều khiển msgTarget. msgTarget: 'side' sẽ đặt thông báo xác thực ở bên phải của điều khiển.

+0

Cảm ơn bạn đã trả lời nhưng tùy chọn này chỉ đặt biểu tượng dấu chấm than ở bên phải của điều khiển chứ không phải thông báo. Tôi cần thông báo xuất hiện, không phải là chú giải công cụ của biểu tượng. – berliner

8

msgTarget: 'elementId' có thể hoạt động, nhưng dường như rất hạn chế, đặc biệt khi bạn muốn nhiều phiên bản của một thành phần ExtJs có thể tái sử dụng (và cho nhiều phiên bản của cùng một phần tử msgTarget). Ví dụ: tôi có trình chỉnh sửa kiểu MDI, nơi bạn có thể mở nhiều trình chỉnh sửa của một loại trong giao diện tab. Nó cũng có vẻ không hoạt động với itemId hoặc nhận ra phân cấp DOM/vùng chứa.

Tôi muốn tắt xử lý mặc định nếu tôi không muốn chính xác một trong các tùy chọn hiển thị thông báo được cài đặt bằng cách đặt msgTarget: none và sau đó thực hiện hiển thị thông báo của riêng mình bằng cách xử lý sự kiện fielderrorchange. . Trong trường hợp này, bây giờ tôi có thể tôn trọng hệ thống phân cấp của biểu mẫu của tôi ngay cả với nhiều phiên bản của cùng một biểu mẫu trình chỉnh sửa vì tôi có thể chọn phần tử hiển thị lỗi liên quan đến trình chỉnh sửa.

Đây là cách tôi làm điều đó:

{ 
    xtype: 'fieldcontainer', 
    fieldLabel: 'My Field Label', 
    layout: 'hbox', // this will be container with 2 elements: the editor & the error 
    items: [{ 
     xtype: 'numberfield', 
     itemId: 'myDataFieldName', 
     name: 'myDataFieldName', 
     width: 150, 
     msgTarget: 'none', // don't use the default built in error message display 
     validator: function (value) { 
      return 'This is my custom validation message. All real validation logic removed for example clarity.'; 
     } 
    }, { 
     xtype: 'label', 
     itemId: 'errorBox', // This ID lets me find the display element relative to the editor above 
     cls: 'errorBox'  // This class lets me customize the appearance of the error element in CSS 
    }], 
    listeners: { 
     'fielderrorchange': function (container, field, error, eOpts) { 
      var errUI = container.down('#errorBox'); 
      if (error) { 
       // show error element, don't esape any HTML formatting provided 
       errUI.setText(error, false); 
       errUI.show(); 
      } else { 
       // hide error element 
       errUI.hide(); 
      } 
     } 
    } 
} 
1

Sử dụng msgTarget 'bên' để xác nhận ở phía bên phải và msgTarget 'dưới' cho đáy

 items: [{ 
       xtype: 'textfield', 
       fieldLabel: 'Name', 
       allowBlank: false, 
       name: 'name', 
       msgTarget: 'side', 
       blankText: 'This should not be blank!' 
      }] 
1

Bạn có thể sử dụng 'msgTarget: [yếu tố id ] '. Bạn phải viết html để sử dụng id phần tử thay vì itemId. Hàm xác nhận bổ sung thêm một phần tử danh sách trong một phần tử mà bạn đã đặt làm 'msgTarget'. Trong trường hợp bạn muốn hiển thị các phần tử mà bạn muốn xác thực, bạn có thể chuyển html thay vì chỉ một văn bản.

{ 
    xtype: 'container', 
    items: [ 
     { 
      xtype: 'textfield', 
      allowBlank: false, 
      msgTarget: 'hoge' 
      blankText: '<div style="color:red;">validation message</div>', // optional 
     }, 
     { 
      xtype: 'box', 
      html: '<div id="hoge"></div>' // this id has to be same as msgTarget 
     } 
    ] 
} 
0

Để hiển thị thông báo lỗi dưới/bên đầu vào hộp văn bản, msgTarget bất động sản sẽ làm việc chỉ trong trường hợp bạn đang sử dụng cách bố trí hình thức.

Để giải quyết vấn đề này ngoài bố cục biểu mẫu, chúng ta cần bọc phần tử trong lớp "x-form-field-wrap".

bạn có thể tìm thêm về chủ đề: https://www.sencha.com/forum/showthread.php?86900-msgTarget-under-problem

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