我有一个表,其中一列有sap.m.Input。这个表有一个模型但是对于输入字段我需要建议来自不同模型的项目。以下是代码但它工作不正常,请建议我一些替代方法或帮我纠正我的错误。
new sap.m.Input({value:'{CUST_NAME}',
showSuggestion:true,
liveChange : function(oEvent) {
console.log(oEvent.getSource().getValue());
console.log(this.getValue());
if (this.getValue().length > 0) {
var oModel = new sap.ui.model.json.JSONModel();
var serviceUrl = "/serviceurl/?$filter=startswith(Name,%27an%27)";
oModel.loadData(serviceUrl,null, false, "GET",false, false, null);
this.setModel(oModel);
console.log(oModel)
this.bindAggregation("suggestionItems", "/d/results", new sap.ui.core.Item({text: "{Name}"}));
}
}
})
答案 0 :(得分:0)
您应该使用第二个named model。 setModel(oModel,sModelName)
函数使用第二个可选项来传递模型的名称。因此,只要具有不同的名称,每个控件都可以具有多个模型。
要访问命名模型,请在绑定中使用modelName>
前缀(必须将其用于绝对和相对绑定!)。
在您的情况下,也不需要每次都为建议项目创建新模型。
var oSuggestionModel = new sap.ui.model.json.JSONModel();
oSuggestionModel.forceNoCache(true);
new sap.m.Input({value:'{CUST_NAME}',
showSuggestion:true,
suggestionItems: {
path: 'suggestion>/d/results',
template: new sap.ui.core.Item({text: "{suggestion>Name}"})
},
liveChange : function(oEvent) {
console.log(oEvent.getSource().getValue());
console.log(this.getValue());
//eventually clear the model: oSuggestionModel.setData({});
if (this.getValue().length > 0) {
var serviceUrl = "/serviceurl/?$filter=startswith(Name,%27an%27)";
oSuggestionModel.loadData(serviceUrl);
}
}
}).setModel(oSuggestionModel, "suggestion");
此外,无需同步加载数据。设置绑定后,稍后填充模型时将自动显示数据。