EnyoJS:从原始JavaScript调用enyo函数

时间:2014-06-30 07:37:03

标签: javascript enyo

在用于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

1 个答案:

答案 0 :(得分:3)

你走在正确的轨道上。实际上,您尝试直接创建MainView works

app.doSomething()不起作用的原因是:

  • 应用程序不存在于全局空间和
  • app没有doSomething方法; MainView确实

有几种方法可以获取对Application实例的引用。最简单的方法是在创建时将其分配给全局:

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();
});