【发布时间】:2014-06-13 00:20:27
【问题描述】:
我确信我遗漏了一些明显的东西,但我似乎无法对这个问题做出正面或反面。我有一个由 javascript 驱动的网页。绑定由Knockout.js 提供,数据来自使用Breeze.js 的服务器,我正在使用与Require.js 绑定在一起的模块。我的目标是加载 html,从 Breeze.js 加载信息,然后应用绑定向用户显示数据。所有这些事情似乎都在正确地发生,只是顺序不正确,这导致了奇怪的绑定错误。现在开始代码。
我有一个在页面加载后被调用的函数
function applyViewModel() {
var vm = viewModel();
vm.activate()
.then(
applyBindings(vm)
);
}
这应该调用激活,等待激活完成,然后应用绑定....但它似乎是在调用激活,而不是等待它完成然后运行应用绑定。
激活 -
function activate() {
logger.log('Frames Admin View Activated', null, 'frames', false);
return datacontext.getAllManufacturers(manufacturers)
.then(function () {
manufacturer(manufacturers()[0]);
}).then(function () {
datacontext.getModelsWithSizes(modelsWithSizes, manufacturers()[0].manufacturerID())
.then(datacontext.getTypes(types));
});
}
datacontext.getAllManufacturers -
var getAllManufacturers = function (manufacturerObservable) {
var query = entityQuery.from('Manufacturers')
.orderBy('name');
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
if (manufacturerObservable) {
manufacturerObservable(data.results);
}
log('Retrieved [All Manufacturer] from remote data source',
data, true);
}
};
datacontext.getModelsWithSizes -
var getModelsWithSizes = function (modelsObservable, manufacturerId) {
var query = entityQuery.from('Models').where('manufactuerID', '==', manufacturerId)
.orderBy('name');
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
if (modelsObservable) {
for (var i = 0; i < data.results.length; i++) {
datacontext.getSizes(data.results[i].sizes, data.results[i].modelID());
// add new size function
data.results[i].addNewSize = function () {
var newValue = createNewSize(this.modelID());
this.sizes.valueHasMutated();
return newValue;
};
}
modelsObservable(data.results);
}
log('Retrieved [Models With Sizes] from remote data source',
data, false);
}
};
对于为什么这个承诺不起作用的任何帮助,以及任何解决它的过程,我都可以在下次遇到这个问题时帮助自己。
【问题讨论】:
标签: javascript knockout.js breeze promise q