我有一个关于SAP UI5中的UI5的问题。
我的代码如下所示:
test : function (oEvent) {
model = new sap.ui.model.json.JSONModel();
// Load JSON in model
model.loadData("http://localhost:8080/getJSON");
model.attachRequestCompleted( function(){
console.log(model.getData());
this.makeSomething()
});
},
在加载模型之后,我想调用函数makeSomething,但这是不可能的。
我试着像这样在函数之后叫它。函数被调用,但模型没有加载。
test : function (oEvent) {
model = new sap.ui.model.json.JSONModel();
// Load JSON in model
model.loadData("http://localhost:8080/getJSON");
model.attachRequestCompleted( function(){
console.log(model.getData());
}, this.checkElement());
},
这有可能吗?
发布于 2016-11-10 09:31:41
this关键字在JavaScript中是很棘手的。如W3schools所述这里
在JavaScript中,所谓的东西是“拥有”JavaScript代码的对象。 当在函数中使用时,它的值是“拥有”函数的对象。 当在对象中使用时,它的值就是对象本身。 对象构造函数中的this关键字没有值。它只是新对象的替代物。 当构造函数用于创建对象时,它的值将成为新的对象。
在您的示例中,如果在测试方法中调用这个,则这个将引用当前控制器。您可以在方法中使用这个来访问控制器的其他方法。
但是,如果在回调方法中使用this,则this --代码的所有者--不再是控制器。这是您的回调方法。this.makeSomething()不存在。
常见的方法是创建一个变量(通常称为,即),给出 this 的值,而this的值是您以后想要访问的。然后,您可以通过回调方法访问它;在回调方法中,变量的将不会更改,而这个将有所不同。
一个代码示例值一千字。请看下面我的变化。
test : function (oEvent) {
var that = this;
model = new sap.ui.model.json.JSONModel();
// Load JSON in model
model.loadData("http://localhost:8080/getJSON");
model.attachRequestCompleted( function(){
console.log(model.getData());
that.makeSomething();
});
},
在使用_globalThis.时,我通常在与控制器方法相同的级别上创建一个名为UI5的变量在onInit方法中,我给它赋值这个,然后可以从我的每个回调方法中访问相同的变量。
https://stackoverflow.com/questions/40531136
复制相似问题