Asp.net mvc 在敲除绑定数据之前查看渲染

Asp.net mvc 在敲除绑定数据之前查看渲染,asp.net-mvc,knockout.js,breeze,single-page-application,durandal,Asp.net Mvc,Knockout.js,Breeze,Single Page Application,Durandal,我确信以前有人问过这个问题,但可惜我找不到它——如果有人能帮我指出正确的方向,我将不胜感激 我正在用Durandal加载视图/视图模型,在激活方法期间,我调用一条记录来获取并显示。我正在恢复记录(检查了XHR响应,所有数据都恢复正常),但我只能假设视图是在数据准备好显示之前加载的。没有JS错误,根本没有错误,只是在屏幕中间有一个大的空白,即使我知道数据应该显示……/P> 视图模型: define(['durandal/system', 'services/logger', 'services/d

我确信以前有人问过这个问题,但可惜我找不到它——如果有人能帮我指出正确的方向,我将不胜感激

我正在用Durandal加载视图/视图模型,在激活方法期间,我调用一条记录来获取并显示。我正在恢复记录(检查了XHR响应,所有数据都恢复正常),但我只能假设视图是在数据准备好显示之前加载的。没有JS错误,根本没有错误,只是在屏幕中间有一个大的空白,即使我知道数据应该显示……/P> 视图模型:

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>

您没有在
executeQuery
success回调中正确填充您的可观察对象,这就是您的UI没有正确呈现的原因

executeQuery
调用
successFunction
,并使用以下参数

successFunction([数据])

  • 数据对象
    • 结果实体数组
因此,您需要从
data.results
数组中填充您的可观察值,而不是从
data.entity
表单中填充(仅返回未定义的):


您没有在
executeQuery
success回调中正确填充您的可观察对象,这就是您的UI没有正确呈现的原因

executeQuery
调用
successFunction
,并使用以下参数

successFunction([数据])

  • 数据对象
    • 结果实体数组
因此,您需要从
data.results
数组中填充您的可观察值,而不是从
data.entity
表单中填充(仅返回未定义的):


您可以通过从activate函数返回jQuery promise()来告诉Durandal推迟绑定


请参阅Ryan Keeter的视频以了解解释:

您可以通过从activate函数返回jQuery promise()来告诉Durandal推迟绑定


查看Ryan Keeter的视频以了解解释:

在viewmodel中,您有
a表单
,但在html中,您有
templateForm
。。你的问题中有错别字吗?是的,错别字是固定的,谢谢。更改了它的易读性,错过了html。我希望它是像一个额外的愚蠢的东西;但如果是的话,这是在暗示我在过去的4个小时。你似乎把你的代码简化到了这里。根据你的密码,我无法重新处理你的问题。在异步设置了
aForm
之后,视图绑定良好。我不确定还有什么有助于发布。有人有主意吗?一直在折磨我。如果我破坏了绑定,就会出现强“测试”,但当我修复绑定时,它会再次消失。是否可能没有发生回调?我可以通过解决方法解决此问题,并以不同的方式返回aForm,但我仍然希望看到正确的方法,因此我将在您的viewmodel中保留此问题,您有
aForm
,但在html中有
templateForm
。。你的问题中有错别字吗?是的,错别字是固定的,谢谢。更改了它的易读性,错过了html。我希望它是像一个额外的愚蠢的东西;但如果是的话,这是在暗示我在过去的4个小时。你似乎把你的代码简化到了这里。根据你的密码,我无法重新处理你的问题。在异步设置了
aForm
之后,视图绑定良好。我不确定还有什么有助于发布。有人有主意吗?一直在折磨我。如果我破坏了绑定,就会出现强“测试”,但当我修复绑定时,它会再次消失。是否可能没有发生回调?我可以通过解决方法解决此问题,并以不同的方式返回aForm,但我仍然希望看到正确的方法,因此我将保留此问题,因为它不会返回未定义,只是不是击倒想要看到的,因为它似乎没有返回未定义的注释,只是不是击倒想要看到的
    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);
        }
    }
if (aObservable) {
   aObservable(data.results[0]);
}