我确信以前有人问过这个问题,但很遗憾我找不到它 - 任何能帮助我指出正确方向的帮助都将不胜感激。
我正在使用 Durandal 加载视图/视图模型,并且在激活方法期间,我要求获取单个记录然后显示。我正在取回记录(检查了 XHR 响应并且所有数据都恢复正常),但我只能假设视图在数据准备好显示之前正在加载。没有 JS 错误,完全没有错误,但我的屏幕中间只有一个大空白,即使我知道数据应该显示......
视图模型:
define(['durandal/system', 'services/logger', 'services/datacontext'], function (system, logger, datacontext) {
var aForm = ko.observable();
var initialized = false;
function activate(routeData) {
var id = parseInt(routeData.id);
return refresh(id);
};
function refresh(id) {
return datacontext.getaFormById(id, aForm);
}
var vm = {
activate: activate,
aForm: aForm,
title: "THE TITLE DISPLAYS JUST FINE"
}
return vm;
});
看法 :
<h3 class="page-title" data-bind="text: title"></h3>
<div class="container-fluid" data-bind="with: aForm">
<div class="row-fluid">
<div class="span12">
<strong>Testing</strong>
<strong data-bind="text: id"></strong>
</div>
</div>
<h2 data-bind="text: description"></h2>
<h2 data-bind="text: checkType().description"></h2>
</div>
我投入了强大的测试,它甚至没有渲染,只有标题。谁能指出我正确的方向?我会创建一个小提琴,但是当我对 ViewModel 中的数据进行硬编码时它会起作用。
编辑 :
好吧,在深入研究之后,我可能没有正确返回对象,特别是在 data.entity 返回类型中。这会导致问题吗?
var getaFormById = function (aFormId, aFormObservable) {
var query = EntityQuery.from('aForms')
.where('id', '==', aFormId);
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
if (aObservable) {
aObservable(data.entity);
}
logger.log('Retrieved selected [aForm] from remote data source', data, system.getModuleId(datacontext), true);
}
}