【发布时间】:2013-04-16 19:50:10
【问题描述】:
我正在从事一个 durandal / 微风 项目。
我需要在我的激活函数中执行几件事。感谢promises 我能够链接异步操作。请注意,我仍然是所有这些事情的初学者,所以请不要犹豫,更正我的代码。
我的 viewModel 中有以下激活函数:
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语句中:
感谢
getTransportById,我填写了transportobservable然后感谢
getItineraryById,我填写了itineraryobservable
-
到目前为止一切顺利。此代码按预期工作并完成工作(可能未优化)。现在我需要在这两个操作之间插入一个条件,以创建一个新实体(如果 idItin==-1)。在这种情况下,将创建一个新实体。我尝试使用下面的代码,但它不起作用:我的意思是 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); });
}
下面是datacontext的createItineraryDetailTransport函数:
var createItineraryDetailTransport = function (idTransport) {
var initialValues = ({
transportId: idTransport
});
var newItinerary = manager.createEntity(entityNames.itinerary, initialValues);
return manager.addEntity(newItinerary);
}
那么有人知道如何编码这个东西吗?
【问题讨论】:
-
你确定没有其他事情发生吗?你的代码对我来说似乎是正确的。这个小提琴是否展示了你想要做的事情? jsfiddle.net/bEfrS/1