大家好(这篇文章很长,抱歉)
我有 3 个下拉列表,它们应该基于彼此动态填充。
大陆 - 国家 - 联赛(足球)
我正在使用热毛巾(Durandal + 淘汰赛 + Breeze)
使用 john papa 提供的课程,我能够毫无问题地完成其中两个课程。预装大陆和国家,它的工作就像一个魅力,但第三个不是。
我正在使用微风来获取数据,检索数据,它与数据无关,在一些 SSO(搜索 StackOverflow)之后,我遇到的问题是“承诺”我需要返回承诺,所以 durandal 可以理解它应该等待。添加了更改,但仍然无法正常工作。
我发现的所有示例都在“激活”函数中工作(在激活函数中返回承诺),但我应该在 observable.subscribe 中返回承诺。
(以及所有交付这些伟大产品的人,请提供更多带有更好标题的样本,为像我这样的新手提供常见场景的描述。谢谢大家)
我不知道我做错了什么。有什么建议吗?
看法:
<section title="Soccer Result">
<select data-bind="options: continents, optionsText: 'name', value: selectedContinent, optionsCaption: 'Please Select a Continent'"></select>
<select data-bind="options: countries, optionsText: 'Title', value: selectedCountry"></select>
<select data-bind="options: leagues, optionsText: 'Title', value: selectedLeague"></select>
<ul id="popularLeagues" data-bind="foreach: popularLeagues">
<li class="popularLeagueLI">
<a>
<span data-bind="text: Title"></span>
</a>
</li>
</ul>
查看 js 代码(只是重要的部分)
function GetLeagueResultByCountryCode(countryCode) {
if (leagueResult()) {
datacontext.getLeagueResultPartials(leagueResult, countryCode, true);
}
logger.log("GetLeagueResultByCountryCode successd");
}
var activate = function () {
selectedCountry.subscribe(function () {
if (selectedCountry()) {
{
if (!selectedCountry() || !selectedCountry().Code == undefined)
return;
//leagues.push( { ID: 340, Title: 'for test' });
return datacontext.getLeaguesByCountryCode(leagues, selectedCountry().Code(), true)
}
}
});
countriesAll(datacontext.lookups.countries);
boot();
};
此行负责返回结果,下拉菜单应根据其结果填充
return datacontext.getLeaguesByCountryCode(leagues, selectedCountry().Code(), true)
数据上下文
var getLeaguesByCountryCode = function (leagues, countryCode, forceRemote) {
var promiseTest = Q.all([
getLeaguesByCountryCode2(leagues, countryCode, forceRemote)
])
return promiseTest.then(succeeded);
function succeeded() {
var x = 'y';
}
}
var getLeaguesByCountryCode2 = function (leagues, countryCode, forceRemote) {
return EntityQuery.from('LeagueByCountryCode')
.withParameters({ countryCode: getKoValue(countryCode) })
.select('ID,Title')
.using(manager).
execute().
then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
var list = partialMapper.mapDtosToEntities(
manager, data.results, 'League', 'ID');
//list = data.results;
if (leagues) {
leagues(list);
}
logger.log('Retrieved [Leagues] from remote data source ' + getKoValue(countryCode),
data, true);
}
};
在第一次尝试时,我只是调用getLeaguesByCountryCode2但在使用 Q.all 搜索getLeaguesByCountryCode之后添加了其他内容。