2015-11-24 2 views
1

Может ли кто-нибудь указать на меня, что не так с моим кодом. Я успешно добавил пользовательские поля в стандартный файл js (SearchResult.view.js). Я знаю, что это не лучшая практика добавления пользовательских полей. Поэтому я применил метод pre post для добавления настраиваемых полей.SRM UI Addon Enhancement

К сожалению, когда я переместил свой код кода в метод 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); 
 
} 
 
    
 
}

ответ

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 
    } 
} 

Вы должны увидеть, что эта функция вызывается для каждого вида на вашей странице несколько раз для каждого вида.

Итак, вы должны проверить, для какого вида и eventName вызывается метод CUSTOM_POST_EXIT и реализуете его настройку только в 1 комбинации вида/события.

Смежные вопросы