私はデュランダル/そよ風のプロジェクトに取り組んでいます。
activate 関数でいくつかのことを実行する必要があります。おかげで、promises
非同期操作を連鎖させることができます。私はまだこれらすべての初心者であるため、コードを修正することをためらわないでください。
ビューモデル内に次のアクティブ化関数があります。
var activate = function (routeData) {
initLookups()
var idTran = parseInt(routeData.idTran);
var idItin = parseInt(routeData.idItin);
return datacontext.getTransportById(idTran, transport)
.then(function () { return datacontext.getItineraryById(idItin, itinerary); });
}
したがって、return ステートメントでは次のようになります。
transport
私はオブザーバブルのおかげで満たすgetTransportById
次に
itinerary
、オブザーバブルのおかげで埋めますgetItineraryById
-
ここまでは順調ですね。このコードは機能し、期待どおりに機能します (最適化されていない可能性があります)。ここで、新しいエンティティを作成する場合 (idItin==-1 の場合) のために、これら 2 つの操作の間に条件を挿入する必要があります。この場合、新しいエンティティが作成されます。以下のコードを試してみましたが、うまくいきませんでした:promise
つまり、ここでは仕事をしていないようで、非同期操作が完了するのを待たずにビューが表示されます。
var activate = function (routeData) {
initLookups()
var idTran = parseInt(routeData.idTran);
var idItin = parseInt(routeData.idItin);
return datacontext.getTransportById(idTran, transport)
.then(function () { if (idItin == -1) return datacontext.createItineraryDetailTransport(idTran); })
.then(function () { return datacontext.getItineraryById(idItin, itinerary); });
}
以下は、データコンテキストのcreateItineraryDetailTransport
機能です。
var createItineraryDetailTransport = function (idTransport) {
var initialValues = ({
transportId: idTransport
});
var newItinerary = manager.createEntity(entityNames.itinerary, initialValues);
return manager.addEntity(newItinerary);
}
それで、誰かがこのことをコーディングする方法を知っていますか?