Javascript 从<;调用Aurelia函数;脚本>;

Javascript 从<;调用Aurelia函数;脚本>;,javascript,aurelia,Javascript,Aurelia,在我的Aurelia视图中,我有一个脚本标记,我想从该标记调用视图模型中的函数: Page.html: 我试图在脚本标记${sayHello();}中使用,但这会在页面加载时立即调用该函数,而不是在用户输入beginEdit()函数时 我在中复制了这段代码 请注意,我使用的包本身调用beginEdit函数,因此很遗憾,我无法在html标记中使用.trigger()、.delegate()或.call(),这将解决我的问题 我的问题是:有没有一个解决方案可以从我的脚本标签调用sayHello()函

在我的Aurelia视图中,我有一个脚本标记,我想从该标记调用视图模型中的函数:

Page.html:

我试图在脚本标记
${sayHello();}
中使用,但这会在页面加载时立即调用该函数,而不是在用户输入beginEdit()函数时

我在中复制了这段代码

请注意,我使用的包本身调用beginEdit函数,因此很遗憾,我无法在html标记中使用.trigger()、.delegate()或.call(),这将解决我的问题


我的问题是:有没有一个解决方案可以从我的脚本标签调用sayHello()函数?

函数需要访问
App
查看模型实例。我们可以使用Aurelia的DI容器来检索:

var-app=container.get(app);
app.sayHello();
问题是我们无法访问
beginEdit
函数中的容器。我们可以使用一个小黑客来访问容器:

var container=document.body.aurelia.container;
我们还需要
App
构造函数,因为它是从容器中检索App实例的关键。我们可以使用系统加载器加载包含应用构造函数的模块:

System.import('app')。然后(函数(模块){
var-App=module.App;
});
总的来说是这样的:

函数beginEdit(){
System.import('app')。然后(函数(模块){
var App=module.App,//获取构造函数
container=document.body.aurelia.container,//获取容器
app=container.get(app);//获取app的实例(viewmodel)
app.sayHello();
});
}
以下是工作原理:

谢谢!这很好,但有时需要很多时间来执行函数,如果您不在app.html/js中,数据绑定将无法工作。如果值得的话,我正在使用Traceur(不是Babel)。执行什么需要很多时间?我在函数中通过
client.createRequest()
发出HTTP请求,然后处理数据。一般来说,这需要不到一秒钟的时间,但有时需要4-5秒(很少更多)。我在另一个函数中遇到了同样的问题,该函数使用jQuery很少进行DOM操作。我需要在aurelia中处理这些问题,以便能够使用验证和HTTP客户端<代码>验证。验证()不适用于容器。所有这些(数据绑定也是)都可以在
.trigger
上正常工作,但不幸的是,我不能像我在问题中提到的那样每次都使用它。为什么不从视图模型中发出请求呢?我不清楚为什么需要脚本标签。对不起,我不够清楚。因此,在视图中,我有一个网格(与包一起使用),然后我必须定义一些函数,当某些特定事件将被触发时,包将自动触发这些函数。当事件触发时,包调用视图中的函数,我想从视图模型中调用函数。我在视图模型中而不是模型中发出请求和验证。具体来说,我想从模型进入视图模型。网格的HTML部分由包构建。
<template>
...
  <script>
        function beginEdit(args) {
            console.log(args);
            console.log(args.primaryKeyValue);
            //In this place I want to call the sayHello() fuction
        };
    </script>
</template>
import {inject} from 'aurelia-framework'
import {HttpClient} from 'aurelia-http-client';
import {Router} from 'aurelia-router';

export class Licigrid{
    constructor(){...}           
    activate(){...}
    ...
    sayHello()
    {
        alert("Hello");
    }  
}