2015-07-24 16 views
6

Sử dụng OpenUI5/SAPUI5, theo tài liệu trên XML Binding Expressions, chúng tôi có khả năng thực hiện một hàm từ chế độ xem.Chức năng bộ điều khiển cuộc gọi từ biểu thức ràng buộc XML

new sap.m.CheckBox({ 
    selected: "{= checkSelectedItems(${odata>CustomerId}) }" 
}) 

Trong điều khiển của tôi phía sau xem:

checkSelectedItems: function(sCustomerId) { 
    return true; 
} 

Theo quan điểm của tôi, tôi nhận được báo lỗi chung chung như thể nó không thể tìm thấy chức năng của tôi:

Uncaught TypeError: Cannot read property 'apply' of undefined 

Tôi đã thử gọi chức năng theo một số cách:

{= .checkSelectedItems() } 
{= my.namespace.checkSelectedItems() } 

Tôi thậm chí đã thử thêm chức năng trong thẻ tập lệnh vào trang chỉ mục của mình để xem nó có quyền truy cập vào các chức năng toàn cục hay không, nhưng tôi cũng không thể kích hoạt chức năng đó. Gợi ý? Tôi có hiểu sai tài liệu không?

Vui lòng xem JS Bin tại đây: http://jsbin.com/sosotacihi/edit?html,output. Tôi đã nhận xét ra hộp kiểm có vấn đề, nhưng nếu bạn đặt nó vào, bạn sẽ thấy lỗi.

+1

Tôi đã thực hiện tiến trình chậm, dường như cách thích hợp để gọi một hàm giống như '{= f (checkSelectedItems, null, $ {odata> CustomerId})}' trong đó tham số đầu tiên của 'f()' là của bạn tên hàm, thứ hai là hàm định dạng cho các tham số của bạn, và thứ ba là một mảng các phần để truyền vào hàm của bạn. Tôi vẫn đang vật lộn với chức năng chưa được xác định. – mitch

Trả lời

2

Bạn cần sử dụng trình định dạng để gọi các phương thức của bộ điều khiển từ Chế độ xem XML.

new sap.m.CheckBox({ 
    selected: "{parts:['odata>CustomerId'], formatter:'.checkSelectedItems'}" 
}); 

Điều này có thể áp dụng cho bất kỳ thuộc tính kích hoạt sự kiện nào. Cách chung để nói đây là:

{parts:['<parameter1>', '<parameter2>', ...], formatter:'.<methodInController>'} 
+0

Tôi đã học được rất nhiều trong năm qua, và tôi đồng ý - các chức năng tôi đã thực sự tìm kiếm được cung cấp bởi các khái niệm của một hàm định dạng. – mitch

0

UI5 Đề xuất sử dụng Ràng buộc biểu thức thay vì chức năng định dạng. Liên kết biểu thức chủ yếu cho các khung nhìn XML không dành cho các khung nhìn JS.

+0

Ràng buộc biểu thức vẫn được hiển thị và được thực hiện trong khung nhìn, bất kể nó được đặt trong JS hay XML. Ngoài ra, làm thế nào là ở trên không phải là một biểu thức ràng buộc? – mitch

+0

Không chắc chắn, ý của bạn là gì khi được thực hiện trong giao diện? –

+0

Giả sử rằng tôi đã khai báo ComboBox trong XML thay vì JavaScript như bạn thấy ở trên. Điều đó có thay đổi câu trả lời của bạn không? – mitch

0

Để tái sử dụng một chức năng điều khiển trong một biểu thức ràng buộc, cú pháp ràng buộc phức tạp làm việc ở đó cũng như:

selected="{= ${parts: [{path: 'myModel>property'}], formatter: '.myMethodInController'} === 'foo'}" 

Hiện nay, nó chỉ hoạt động khi parts:[{path: ...}] được bao gồm . Nhưng tất nhiên, chỉ vì nó hoạt động, không có nghĩa là chúng ta nên sử dụng nó. Như bạn có thể thấy, một ràng buộc biểu thức như vậy có thể trở nên không thể đọc được một cách nhanh chóng.
UI5 đề xuất gắn với chức năng định dạng nếu liên kết biểu thức khó đọc.

Chúng tôi khuyên bạn nên sử dụng hàm định dạng thay vì biểu thức rất phức tạp và khó đọc.

Kiểm tra số documentation này.


Cú pháp someFn(...) trong một ràng buộc biểu hiện chỉ hoạt động nếu someFn là một trong những biểu tượng toàn cầu, chẳng hạn như Math.max(...) hoặc isNaN(...).

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