通过 JSON 模型绑定事件
Bind an Event via a JSON Model
我想知道是否可以通过 JSONModel 绑定事件。
如果我这样做,它总是会抛出这个异常:
Uncaught TypeError: I.fFunction.call is not a function
这是我的代码:
_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;
}
我有一个通用上下文菜单,它只需要一些配置即可创建。这就是我从我的控制器调用这个函数的方式:
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 示例。
您不能对事件使用数据绑定。
但是您可以为您的菜单项实现一个通用事件处理程序,它将调用适当的函数。
将菜单项 select 事件绑定到通用事件处理程序:
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()
可以调用给定 this 对象上的函数。
这里是 JSBin
我想知道是否可以通过 JSONModel 绑定事件。
如果我这样做,它总是会抛出这个异常:
Uncaught TypeError: I.fFunction.call is not a function
这是我的代码:
_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;
}
我有一个通用上下文菜单,它只需要一些配置即可创建。这就是我从我的控制器调用这个函数的方式:
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 示例。
您不能对事件使用数据绑定。 但是您可以为您的菜单项实现一个通用事件处理程序,它将调用适当的函数。
将菜单项 select 事件绑定到通用事件处理程序:
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()
可以调用给定 this 对象上的函数。
这里是 JSBin