gpt4 book ai didi

Ember.js - 多个 App.deferReadiness() 和 App.advanceReadiness() 调用

转载 作者:行者123 更新时间:2023-12-02 06:03:56 25 4
gpt4 key购买 nike

我正在尝试在我的应用程序中运行两个初始化程序。

第一个是 Socket.io 连接,它打开一个 Socket,然后将其共享给其他初始化程序和所有 Controller /路由。

第二个是 session 系统,它处理 cookie 存储并将用户配置文件下拉到 Store。

我想做的是在第一个初始化程序中使用 App.deferReadiness() 并在第二个初始化程序中使用 App.advanceReadiness() 。这就是问题所在。

如果我将 App.deferReadiness() 调用放在第一个初始化程序中,将 App.advanceReadiness() 调用放在另一个初始化程序中,则应用程序不会启动。

如果我在两个文件中使用匹配的 App.deferReadiness() 和 App.advanceReadiness() 对,我会收到一条错误消息,提示“已调用就绪 Hook ”。 (这来自第二个初始化器)。

我究竟做错了什么?

注意:我没有发布代码示例,因为我认为不需要它们。如果是,请告诉我。

更新

/initializers/socket.js

/* Socket Initaializer */
var Initaializer = {
name: 'Socket',
initialize: function(Container, App) {

App.deferReadiness();

/* Open Socket.IO Connection */


}
};

/initializers/session.js
/* Export */
export default Initaializer;


/* Session Initaializer */
var Initaializer = {
name: 'Session',
after: 'Socket',
initialize: function(Container, App) {

// Session Code Here

App.advanceReadiness();


// Nothing Happens After This....

}
};

/* Export */
export default Initaializer;

最佳答案

您应该使用 nameafter初始化器的属性来设置这个:

Ember.Application.initializer({
name: 'init_socket',

initialize: function (container, application) {
application.deferReadiness();
// your socket init code here
//...
}
});


Ember.Application.initializer({
name: 'init_session',

after: 'init_socket',

initialize: function (container, application) {
// your session system init code here
// ...
application.advanceReadiness();
}
});

这样,您的 init_session将等待 init_socket完成,而整个应用程序仅在 init_session 结束时启动.

更新

你可以在这里看到一个活生生的例子: http://jsbin.com/zagejo/1/

我从两个不同的数组加载商店中的用户,一个接一个地在 deferReadiness() 之间。和 afterReadiness() .

最后,一旦应用程序启动,就会加载 FIXTURES。
Ember.Application.initializer({
name: 'first_load',

initialize: function (container, application) {
application.deferReadiness();
var store = container.lookup('store:main');
store.pushMany('user', firstLoad);
}
});


Ember.Application.initializer({
name: 'second_load',

after: 'first_load',

initialize: function (container, application) {
var store = container.lookup('store:main');
store.pushMany('user', secondLoad);
application.advanceReadiness();
}
});

关于Ember.js - 多个 App.deferReadiness() 和 App.advanceReadiness() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25425321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com