「customerLoaded」アクションをリッスンしている Reflux ストアがあります。このアクションにより、顧客の詳細が店舗に提供されます。ストアが新規または更新された顧客情報を受信すると、リッスン コンポーネントに新規または更新された顧客の詳細を通知するようトリガーされます。
(すべてのコードはオランダ語から英語に翻訳されているため、1 つまたは 2 つのタイプミスがある可能性があります)
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 の同じ組み合わせが問題なく使用されることです。この組み合わせは、別の顧客の詳細を表示するために使用する場合にも機能します。
何が問題なのか、またはストアがアクションに応答しない理由を確認するために何ができるかについての手がかりを誰かが持っていますか?
前もって感謝します!