Aurelia 中的全局函数
Global Functions In Aurelia
我正在尝试弄清楚如何在 Aurelia 中存储类似 "global" 的函数。我已经按照本教程“http://blog.durandal.io/2015/04/24/aurelia-custom-elements-and-content-selectors/”打开一个带有动态视图模态的模态,但我不知道我应该把这个函数放在哪里,这样我就可以在我的所有视图路由中重新使用它。
我在默认视图中创建了这个函数:
//open modal
setModal(modal) {
this.contentModal = modal;
$('.modal').modal();
}
在该视图模板中使用此标记:
<a click.delegate="setModal('users')">Test</a> <a click.delegate="setModal('child-router')">Test 2</a>
<modal>
<modal-header title.bind="'View Person'"></modal-header>
<modal-body content.bind="contentModal"></modal-body>
<modal-footer buttons.bind="['Cancel']"></modal-footer>
</modal>
我可以在该视图模板内通过 click.delegate="setModal('users')
调用它,但我不知道如何在该视图模板之外实际使用它。
抱歉,我是这个框架的新手!
听起来你有一个默认视图 + 视图模型,让我们称它们为 app.html 和 app.js。
在 app.html 中,您有模态标记:
<modal>
<modal-header title.bind="'View Person'"></modal-header>
<modal-body content.bind="contentModal"></modal-body>
<modal-footer buttons.bind="['Cancel']"></modal-footer>
</modal>
并且在app.js中你有显示模态的功能:
//open modal
setModal(modal) {
this.contentModal = modal;
$('.modal').modal();
}
你的问题是"how do I share the setModal function with other view-models?"
您可以在容器中注册setModal函数。然后你就可以将它注入到其他依赖于该函数的视图模型中:
app.js
import {inject, Container} from 'aurelia-framework'; // or 'aurelia-dependency-injection'
@inject(Container)
export class App {
constructor(container) {
// register the setModal function in the container
// under the key "setModal".
container.registerInstance('setModal', this.setModal.bind(this));
}
//open modal
setModal(modal) {
this.contentModal = modal;
$('.modal').modal();
}
}
其他观点-model.js
import {inject} from 'aurelia-framework'; // or 'aurelia-dependency-injection'
@inject('setModal') // inject the setModal function into this view-model
export class SomeOtherViewModel {
constructor(setModal) {
// create a setModal property for binding purposes
this.setModal = setModal;
}
}
aurelia-dialog 插件也值得一看。您也可以将它包装在一个自定义属性中,这样您就不必将 setModal 函数导入到您的视图模型中。
我建议在您的配置中使用 globalResources
函数。
一个例子是
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.globalResources('scripts/global.js');
aurelia.start().then( () => aurelia.setRoot('main.js'));
}
我正在尝试弄清楚如何在 Aurelia 中存储类似 "global" 的函数。我已经按照本教程“http://blog.durandal.io/2015/04/24/aurelia-custom-elements-and-content-selectors/”打开一个带有动态视图模态的模态,但我不知道我应该把这个函数放在哪里,这样我就可以在我的所有视图路由中重新使用它。
我在默认视图中创建了这个函数:
//open modal
setModal(modal) {
this.contentModal = modal;
$('.modal').modal();
}
在该视图模板中使用此标记:
<a click.delegate="setModal('users')">Test</a> <a click.delegate="setModal('child-router')">Test 2</a>
<modal>
<modal-header title.bind="'View Person'"></modal-header>
<modal-body content.bind="contentModal"></modal-body>
<modal-footer buttons.bind="['Cancel']"></modal-footer>
</modal>
我可以在该视图模板内通过 click.delegate="setModal('users')
调用它,但我不知道如何在该视图模板之外实际使用它。
抱歉,我是这个框架的新手!
听起来你有一个默认视图 + 视图模型,让我们称它们为 app.html 和 app.js。
在 app.html 中,您有模态标记:
<modal>
<modal-header title.bind="'View Person'"></modal-header>
<modal-body content.bind="contentModal"></modal-body>
<modal-footer buttons.bind="['Cancel']"></modal-footer>
</modal>
并且在app.js中你有显示模态的功能:
//open modal
setModal(modal) {
this.contentModal = modal;
$('.modal').modal();
}
你的问题是"how do I share the setModal function with other view-models?"
您可以在容器中注册setModal函数。然后你就可以将它注入到其他依赖于该函数的视图模型中:
app.js
import {inject, Container} from 'aurelia-framework'; // or 'aurelia-dependency-injection'
@inject(Container)
export class App {
constructor(container) {
// register the setModal function in the container
// under the key "setModal".
container.registerInstance('setModal', this.setModal.bind(this));
}
//open modal
setModal(modal) {
this.contentModal = modal;
$('.modal').modal();
}
}
其他观点-model.js
import {inject} from 'aurelia-framework'; // or 'aurelia-dependency-injection'
@inject('setModal') // inject the setModal function into this view-model
export class SomeOtherViewModel {
constructor(setModal) {
// create a setModal property for binding purposes
this.setModal = setModal;
}
}
aurelia-dialog 插件也值得一看。您也可以将它包装在一个自定义属性中,这样您就不必将 setModal 函数导入到您的视图模型中。
我建议在您的配置中使用 globalResources
函数。
一个例子是
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.globalResources('scripts/global.js');
aurelia.start().then( () => aurelia.setRoot('main.js'));
}