在用于HPalm设备的“old”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
答案 0 :(得分:3)
你走在正确的轨道上。实际上,您尝试直接创建MainView works。
app.doSomething()
不起作用的原因是:
有几种方法可以获取对Application实例的引用。最简单的方法是在创建时将其分配给全局:
var app;
enyo.ready(function() {
app = new myapp.Application({name: "app"});
});
// later
app.doSomething();
另一种选择是从enyo.applications
哈希中获取它,该哈希以其名称存储对每个创建的应用程序的引用。
enyo.applications.app.doSomething();
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();
});