我想知道是否可以通过JSONModel绑定一个事件。
如果我这样做,它将始终抛出此异常:
未捕获的TypeError:I.fFunction.call不是函数
这是我的代码:
_ViewReference: undefined,
_oMenuItemsConfigModel: undefined,
createMenu: function(oItem){
if (!this._menu) {
this._menu = new sap.ui.unified.Menu(this._oMenuConfig);
this._menu.setModel(this._oMenuItemsConfigModel);
this._menu.bindAggregation("items", "/", new sap.ui.unified.MenuItem({
text: "{text}",
icon: "{icon}",
select: "{select}",
enabled: "{enabled}"
}));
this._ViewReference.addDependent(this._menu);
}
var eDock = sap.ui.core.Popup.Dock;
this._menu.open(false, oItem, eDock.BeginTop, eDock.BeginBottom, oItem);
return oItem;
}
我有一个Universal ContextMenu,只需要一些配置才能创建。这就是我从Controller中调用此函数的方法:
var oContextMenu = new ContextMenu(this.getView(),
new sap.ui.model.json.JSONModel(
[
{
text: "Copy",
select: [this.onContextMenuItemCopySelected, this]
},
{
text: "Paste",
select: [this.onContextMenuItemPasteSelected, this]
}
]
)
);
这是一个JSBin示例。
答案 0 :(得分:1)
您无法对事件使用数据绑定。 但是您可以为您的菜单项实现一个通用事件处理程序,它将调用相应的函数。
将菜单项选择事件绑定到公共事件处理程序:
this._menu.bindAggregation("items", "/", new sap.ui.unified.MenuItem({
text: "{text}",
select: [this.onSelect, this]
}));
并实现这样的处理程序:
onSelect:function(oEvent){
var item = oEvent.getParameter("item");
var context = item.getBindingContext();
var fnConfig = context.getProperty("select");
fnConfig[0].bind(fnConfig[1])();
}
fnConfig
是函数的数组,来自模型的this-object。
使用Function.bind()
可以调用给定此对象的函数。
此处位于JSBin