2014-11-17 2 views
0

Я хочу связать свойства с моего контроллера с представлением.SAPUI5: Свойства контроллера привязки к виду

в angularjs это так просто, как манипулирование $ объем:

$scope.buttonProps = { 
    value: 'cheese', 
    disabled: 'disabled', 
    onClick: function() {} 
}; 

<custom-button disabled="buttonProps.disabled" onclick="buttonProps.onClick" value="{{buttonProps.value}}" /> 

Однако, когда я пытаюсь сделать то же самое в SAPUI5

sap.ui.core.mvc.Controller.extend('...', { 
    buttonProps: { 
     value: 'cheese', 
     disabled: 'disabled', 
     onClick: function() {} 
    } 
}); 

<custom-button value="{buttonProps.value}" disabled="{buttonProps.disabled}" click="buttonProps.onClick" /> 

не работает - основа не кажется чтобы иметь доступ к свойствам объекта «buttonProps».

если я, однако, переместить свойства непосредственно на контроллер, он работает

sap.ui.core.mvc.Controller.extend('...', { 
    value: 'cheese', 
    disabled: 'disabled', 
    onClick: function() {} 
}); 

<custom-button value="{value}" disabled="{disabled}" click="onClick" /> 

, но, конечно, это очень неорганизованный способ работы, когда вы получите более сложные виды.

Я попытался создать JSONModel и связывание значений с помощью модели:

sap.ui.core.mvc.Controller.extend('...', { 
    buttonProps: new sap.ui.model.json.JSONModel({ 
     value: 'cheese', 
     disabled: 'disabled', 
     onClick: function() {} 
    }) 

    onAfterRendering: function() { 
     this.byId('btn').setModel(this.buttonProps); 
    } 
}); 

<custom-button id="btn" value="{/value}" disabled="{/disabled}" click="/onClick" /> 

и она работает за все ... за исключением функций.

Есть ли способ привязать свойства моего контроллера к виду?

ответ

1

UI5 следует за парадигмой M-V-C и не является частью модели данных.

Правильный способ сделать привязку данных выглядит следующим образом:

Вид:

onClick определяется как функция в контроллере не в модели данных.

<custom-button id="btn" value="{/value}" disabled="{/disabled}" click="onClick" /> 

Контроллер:

sap.ui.core.mvc.Controller.extend('...', { 

    buttonProps: new sap.ui.model.json.JSONModel({ 
     value: 'cheese', 
     disabled: 'disabled' 
    }), 

    onInit: function() { 
     this.byId('btn').setModel(this.buttonProps); 
    }, 

    onClick:function(oEvent) { 

    }  

}); 
+0

Да, это все здорово, точно так, как я думал, - спасибо за исправление моей синтаксиса. Но почему они создали структуру, так что я не могу организовать свои методы в под-объектах? Например, почему я не могу определить 'buttonMethods: {onClick: ...}' 'на моем контроллере, а затем присоединить функцию к кнопке:' '... click =" buttonMethods.onClick "...' ' –

+0

почему вам нужны под-объекты? В представлении обычно есть один контроллер с атрибутом controllerName, определенным в представлении XML. – Allen

+0

Я хотел бы иметь под-объекты для организации моих методов, чтобы сделать код более удобным. Вместо того, чтобы иметь 5 различных методов onClick со странным соглашением об именах, таких как nameButtonOnClick, streetButtonOnClick и т. Д., Я хотел бы организовать обработчики функций каждой кнопки в под-объект, чтобы они были сгруппированы вместе. То есть nameButton: {onClick: ..., onHover: ...}, streetButton: {onClick: ..., onHover ...}. Таким образом, код легче управлять, и в конечном итоге его легко поддерживать. –

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