- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
读完有关激活器的文档后,我仍然对如何使用激活器感到困惑。我想做的很简单:
我定义了一个名为 global 的 requireJS 模块。当我在其他模块中使用此模块时,不会调用它的激活函数。我确实需要它。
如果我使用 compose: 加载模块,激活函数就会正常触发。但如果我只是将其作为 AMD 模块加载,它们就不会。这就是我想要解决的问题。
注意:我的模块是单例,实际上我只需要激活一次即可运行,所以我尝试了这样的方法,但不起作用,我的 shell.js
define(['plugins/router', 'durandal/app', 'plugins/ajax','durandal/global'], function (router, app,ajax,global) {
var vm = {};
vm.global = global;
vm.activate= function () {
return vm.rebuildRouter();
//not sure what this does, does it return a promise, does it run global's activate, does it hook up global so it activates at a later time, and if so when?
global.activator.activateItem(global); //I created an activator and called in activator inside global. Since its a singlton I think I only need one?
//Since I wasn't sure how to use activators I had to do this instead:
var promise = global.activate();
return promise;
//which works only the first time
}
如果有人可以向我解释这个激活器业务,我将不胜感激。我一直将 activate 与 compose 结合使用,这按照我想要的方式工作。我只是不明白我需要做什么才能让它像上面描述的那样工作,并且找不到一个简单的例子来展示如何让任何 js 模块以相同的方式运行。
最佳答案
安activator是一个特殊的计算观察,其写入函数强制 activation lifecycle当它的值试图改变时。
canDeactivate
根据当前值调用canActivate
在尝试设置的值上调用deactivate
activate
在尝试设置的值上被调用使用激活器可以强制某些对象在其值发生变化时触发这些事件,并在 canDeactivate
或 canActivate
返回 false< 时阻止更改
.
听起来您不需要激活器。您并不是试图强制根据这些规则发生值更改,而是试图确保模块在使用之前执行某些逻辑。它只需要执行此逻辑一次,因为它是单例。
不幸的是,RequireJS 没有提供(据我所知)等待模块执行异步工作的方法。
这是你可以做的一件事。由于 Durandal 的 app.start
初始化是一个异步过程,因此您可以 Hook 它,以便在 global
初始化之后调用 setRoot
。
define(['durandal/app', 'plugins/ajax', 'durandal/global'], function (app,ajax) {
return function GlobalModule() {
activate: function() {
return //some promise;
}
};
});
define(['durandal/system', 'durandal/app', 'durandal/global'],
function (system, app, global) {
app.configurePlugins({ /* plugins */ });
app.title = 'App';
app.start()
.then(global.activate)
.then(function () {
app.setRoot('shell');
});
});
这将确保 setRoot
在 global
完成激活之前不会启动。然后,在您的任何应用代码中使用它都应该是安全的。
请记住,我不知道 durandal/global
是什么,并且这项工作依赖于 activate
作为 promise 返回函数。
关于durandal 激活器 - 如何创建一个在加载或首次使用时实现 activate() 的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22793692/
我最近在我的机器上安装了 cx_Oracle 模块,以便连接到远程 Oracle 数据库服务器。 (我身边没有 Oracle 客户端)。 Python:版本 2.7 x86 Oracle:版本 11.
我想从 python timeit 模块检查打印以下内容需要多少时间,如何打印, import timeit x = [x for x in range(10000)] timeit.timeit("
我盯着 vs 代码编辑器上的 java 脚本编码,当我尝试将外部模块包含到我的项目中时,代码编辑器提出了这样的建议 -->(文件是 CommonJS 模块;它可能会转换为 ES6 模块。 )..有什么
我有一个 Node 应用程序,我想在标准 ES6 模块格式中使用(即 "type": "module" in the package.json ,并始终使用 import 和 export)而不转译为
我正在学习将 BlueprintJS 合并到我的 React 网络应用程序中,并且在加载某些 CSS 模块时遇到了很多麻烦。 我已经安装了 npm install @blueprintjs/core和
我需要重构一堆具有这样的调用的文件 define(['module1','module2','module3' etc...], function(a, b, c etc...) { //bun
我是 Angular 的新手,正在学习各种教程(Codecademy、thinkster.io 等),并且已经看到了声明应用程序容器的两种方法。首先: var app = angular.module
我正在尝试将 OUnit 与 OCaml 一起使用。 单元代码源码(unit.ml)如下: open OUnit let empty_list = [] let list_a = [1;2;3] le
我在 Angular 1.x 应用程序中使用 webpack 和 ES6 模块。在我设置的 webpack.config 中: resolve: { alias: { 'angular':
internal/modules/cjs/loader.js:750 return process.dlopen(module, path.toNamespacedPath(filename));
在本教程中,您将借助示例了解 JavaScript 中的模块。 随着我们的程序变得越来越大,它可能包含许多行代码。您可以使用模块根据功能将代码分隔在单独的文件中,而不是将所有内容都放在一个文件
我想知道是否可以将此代码更改为仅调用 MyModule.RED 而不是 MyModule.COLORS.RED。我尝试将 mod 设置为变量来存储颜色,但似乎不起作用。难道是我方法不对? (funct
我有以下代码。它是一个 JavaScript 模块。 (function() { // Object var Cahootsy; Cahootsy = { hello:
关闭。这个问题是 opinion-based 。它目前不接受答案。 想要改进这个问题?更新问题,以便 editing this post 可以用事实和引文来回答它。 关闭 2 年前。 Improve
从用户的角度来看,一个模块能够通过 require 加载并返回一个 table,模块导出的接口都被定义在此 table 中(此 table 被作为一个 namespace)。所有的标准库都是模块。标
Ruby的模块非常类似类,除了: 模块不可以有实体 模块不可以有子类 模块由module...end定义. 实际上...模块的'模块类'是'类的类'这个类的父类.搞懂了吗?不懂?让我们继续看
我有一个脚本,它从 CLI 获取 3 个输入变量并将其分别插入到 3 个变量: GetOptions("old_path=s" => \$old_path, "var=s" =
我有一个简单的 python 包,其目录结构如下: wibble | |-----foo | |----ping.py | |-----bar | |----pong.py 简单的
这种语法会非常有用——这不起作用有什么原因吗?谢谢! module Foo = { let bar: string = "bar" }; let bar = Foo.bar; /* works *
我想运行一个命令: - name: install pip shell: "python {"changed": true, "cmd": "python <(curl https://boot
我是一名优秀的程序员,十分优秀!