Javascript 异步加载的模块如何从Bacon.js总线获取最新值?
我在AMD模块中有一个Javascript 异步加载的模块如何从Bacon.js总线获取最新值?,javascript,amd,bacon.js,Javascript,Amd,Bacon.js,我在AMD模块中有一个Bacon.Bus define( 'bus', [ 'bacon' ], function( Bacon ){ return new Bacon.Bus(); } ); 其他模块将值推送到总线上 define( 'pusher', [ 'bus' ], function( bus ){ // ... bus.push( value ); // ... } ); 而其他模块则侦听值 define( 'listener', [ 'bus'
Bacon.Bus
define( 'bus', [ 'bacon' ], function( Bacon ){
return new Bacon.Bus();
} );
其他模块将值推送到总线上
define( 'pusher', [ 'bus' ], function( bus ){
// ...
bus.push( value );
// ...
} );
而其他模块则侦听值
define( 'listener', [ 'bus' ], function( bus ){
bus.onValue( function( value ){
// Consume value
} );
} );
当前加载的任何模块都会接收推送的值;但是,之后加载的任何模块都不会
我尝试创建一个Bacon.Property
来保存当前值
define( 'bus', [ 'bacon' ], function( Bacon ){
var bus = new Bacon.Bus();
bus.current = bus.toProperty();
return bus;
} );
// The pusher is unchanged
define( 'listener', [ 'bus' ], function( bus ){
bus.current.onValue( function( value ){
// Consume value
} );
} );
但这仍然没有解决问题。无论我将onValue
连接到bus
还是bus.current
,在事件发生后加载的模块都不会被触发
我错过了什么?这几乎是同一个古老的懒惰问题:
作为一种解决方法,您可以向属性添加无操作订阅服务器,以确保即使在没有实际订阅服务器的情况下也能对其进行更新。或者你可以使用这实际上是同一个旧的懒惰问题:
作为一种解决方法,您可以向属性添加无操作订阅服务器,以确保即使在没有实际订阅服务器的情况下也能对其进行更新。或者你可以使用你能不能给我们看一下侦听器代码(即异步加载的模块)?我添加了一个示例侦听器模块。无论侦听器是在推送时加载的,还是在推送之后加载的,代码都是相同的。您能给我们看一下侦听器代码(即异步加载的模块)吗?我添加了一个示例侦听器模块。无论侦听器是在推送
时加载的,还是在推送之后加载的,代码都是相同的。谢谢!这确实解决了我的问题。我在bus
模块的current
中添加了一个空的onValue
,该功能正常。我将研究如何使用Bacon.Model
。谢谢!这确实解决了我的问题。我在bus
模块的current
中添加了一个空的onValue
,该功能正常。我将研究如何使用Bacon.Model
。