有人能指出我的代码有什么问题。我已在标准js文件(SearchResult.view.js)上成功添加了自定义字段。我知道这不是关于如何添加自定义字段的最佳做法。所以我实现了一个用于添加自定义字段的预发布方法。
不幸的是,当我将自定义代码块移动到pre post方法时,它添加了多行,而不是添加一行(字段)。我尝试创建一个计数器,但它也不起作用
以下是我的自定义js代码。提前谢谢!
function ADDCUSTOMFIELD1(){
};
ADDCUSTOMFIELD1.prototype.CUSTOM_POST_EXIT = function(methodName,view,controller, methodSignaure) {
if (!sap.ui.getCore().byId("ni_home"))
return;
else add_custom_item();
};
function add_custom_item(){
if (sap.ui.getCore().byId("subMatrix")){
// Supplier Name
matrixSubRow = new sap.ui.commons.layout.MatrixLayoutRow();
control = new sap.ui.commons.Label({
text : Appcc.getText("SUPPLIER_TEXT") + ":"
});// control.addStyleClass("search_middle_spacing");
matrixCell = new sap.ui.commons.layout.MatrixLayoutCell();
matrixCell.addContent(control);
control = new sap.ui.commons.Label();
control.bindProperty("text", "vendor_name");
if (sap.ui.getCore().getConfiguration().getRTL()) {
control.addStyleClass("search_middle_spacingNewRTL");
Appcc.addStyleClass(control, 'search_middle_spacingNew', true);
} else
control.addStyleClass("search_middle_spacingNew");
matrixCell.addContent(control);
// control = new sap.ui.commons.Label();
// control.bindProperty("text", "itm_price");
// control.addStyleClass("search_middle_spacing");
// matrixCell.addContent(control);
matrixSubRow.addCell(matrixCell);
sap.ui.getCore().byId("subMatrix").addRow(matrixSubRow);
}
}
答案 0 :(得分:1)
您的自定义代码块会添加多行,因为为视图上的每个事件调用CUSTOM_POST_EXIT
函数。触发单个视图上的多个事件(beforerender,render,ondatamodelloaded等)。 methodName参数是事件的名称。试试这个
function ADDCUSTOMFIELD1() {};
ADDCUSTOMFIELD1.prototype.CUSTOM_POST_EXIT = function(methodName, view, controller, methodSignaure) {
var viewId = controller && controller.getView().getId();
console.log(viewId, methodName)
if (viewId === 'name_of_your_view' && methodName === 'onDataModelLoaded')
//implement your customization
}
}
您应该会在每个视图中多次为页面上的每个视图调用此函数。
因此,您应该检查调用CUSTOM_POST_EXIT
方法的视图和eventName,并仅在1个视图/事件组合中实现自定义。