在 HPalm 设备的“旧”enyo 中,我能够从/通过 JS 调用我的 enyo 类函数,如下所示:
<span class="button" onclick="app.doSomething();"></span>
现在在 enyoJS 中它不起作用。我的 app.js 如下所示:
enyo.kind({
name: "myapp.Application",
kind: "enyo.Application",
view: "myapp.MainView"
});
enyo.ready(function () {
new myapp.Application({name: "app"});
});
我几乎尝试了所有我能想到的方法,但没有任何方法可以解决这个问题。
var app = new myapp.MainView();
app.renderInto(document.body);
app.doSomething();
^ 等也不起作用。
我的主视图:
enyo.kind({
name: "myapp.MainView",
kind: "FittableRows",
classes: "enyo-fit enyo-unselectable",
fit: true,
components:[
//... stuff here ...
],
doSomething: function(){
console.log("Hello!");
}
});
有什么办法可以实现我所需要的吗? TYVM
最佳答案
你走在正确的道路上。事实上,您尝试直接创建 MainView works .
app.doSomething() 不起作用的原因是:
- 应用程序不存在于全局空间中,并且
- 应用程序没有 doSomething 方法; MainView 确实如此
有几种方法可以获取对应用程序实例的引用。最简单的方法是在创建时将其分配给全局:
var app;
enyo.ready(function() {
app = new myapp.Application({name: "app"});
});
// later
app.doSomething();
另一种选择是从 enyo.applications
哈希中获取它,该哈希通过名称存储对每个创建的应用程序的引用。
enyo.applications.app.doSomething();
这是一个complete example
enyo.kind({
name: "myapp.Application",
kind: "enyo.Application",
view: "myapp.MainView",
doSomething: function() {
this.$.mainView.doSomething();
}
});
enyo.kind({
name: "myapp.MainView",
kind: "FittableRows",
classes: "enyo-fit enyo-unselectable",
fit: true,
components:[
//... stuff here ...
],
doSomething: function(){
console.log("Hello!");
}
});
enyo.ready(function () {
var app = new myapp.Application({name: "app"});
// works, but not recommended as it breaks encapsulation
// app.$.mainView.doSomething();
// preferred but requires a little extra code
app.doSomething();
});
关于javascript - EnyoJS : Call enyo functions from raw JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24485089/