[英]Reflux store is in one situation not listening to an action
我有一家Reflux商店正在监听“ customerLoaded”操作。 此操作将客户详细信息提供给商店。 当商店收到新的或更新的客户信息时,将触发该通知以通知侦听新的或更新的客户详细信息的组件。
(所有代码都已从荷兰语翻译成英语,因此可能会有一两个错字)
var CustomerStore = Reflux.createStore({
init: function ()
{
this.listenTo(CustomerActions.customerLoaded, this._onCustomerLoaded);
},
// handlers
_onCustomerLoaded: function (data)
{
if (data)
{
_customers[data.Number] = data;
this.trigger(data.Number);
}
},
getCustomer: function(number)
{
var customer = null;
if(_customers[number])
{
customer = _customers[number];
}
else
{
CustomerActions.loadCustomer(number);
}
return customer;
}
});
我有我的反流动作。
var CustomerActions = Reflux.createActions(
[
"loadCustomer",
"customerLoaded",
"setEmail",
]
);
CustomerActions.loadCustomer.preEmit = function (number)
{
if (!number|| number=== 0 || number=== '')
{
CustomerActions.customerLoaded(null);
}
else
{
// request details from server
CustomerApi.getCustomerByNumber(number)
.done(function (data)
{
// send details to the store
CustomerActions.customerLoaded(data);
}
);
}
};
CustomerActions.setEmail.preEmit = function (number, newValue)
{
if(number && number !== 0 && number !== '')
{
// send updated email address to server
CustomerApi.setEmail(number, newValue)
.done(function (result)
{
if(result)
{
// start action to load customer details from the server
CustomerActions.loadCustomer(number);
}
// else.. TODO: ...
});
}
};
使用setEmail操作时,会发生此问题。 实际上,此操作按应有的方式工作,并且电子邮件地址已在服务器上更新。 即使触发了从服务器重新加载客户详细信息的操作,但在loadCustomer.preEmit中,触发“ CustomerActions.customerLoaded(data)”操作时也没有任何反应。 CustomerStore不响应此操作。 'data'参数包含预期的数据,所以这不是问题。
最奇怪的是,要最初在屏幕上显示客户详细信息,可以使用CustomerActions.loadCustomer和CustomerStore的相同组合,而不会出现任何问题。 当我使用它来显示其他客户的详细信息时,该组合也仍然有效。
是否有人知道可能是什么问题,或者我能做些什么来检查商店为什么不响应该行为?
提前致谢!
尝试使用示例异步工作流而不是使用preEmit钩子重写代码。 如果您需要验证,我认为您应该使用shouldEmit钩子而不是preEmit。 但是,首先尝试不使用任何钩子。 https://github.com/spoike/refluxjs#asynchronous-actions
也许这会有所帮助。
通过“要求”应处理JS文件中的te操作的商店,并通过该视图启动更改电子邮件地址(调用CustomerActions.setEmail操作),解决了该问题。 该解决方案与我的期望不符。 我希望,因为该存储库已经在使用中(并且正在运行),所以它已经在内存中,因此应该响应注册了侦听器的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.