【发布时间】:2014-11-03 14:16:04
【问题描述】:
很抱歉,这个问题主要是 Knockout,但在 Durandal 中,所以 ko anwser 的贡献者看起来并不熟悉 viewModel 和一些绑定。
基本上,我的视图由一个呈现服务器数据的表组成:
view.html
<table class="table">
<tr>
<td>Company</td>
<td data-bind="text: Company"></td>
</tr>
<tr>
<td>First Name</td>
<td data-bind="text: FirstName"></td>
</tr>
<tr>
<td>Last Name</td>
<td data-bind="text: LastName"></td>
</tr>
</table>
我在ASP.net 所以当然我使用signalR 来获取代表表中每个值的服务器数据。这是一个异步调用,因此它不会阻塞将执行 Knockout 绑定的 Durandal Composition 回调。
viewModel.js
define(['services/logger', 'global/session', 'jquery', 'knockout', 'knockout-mapping', 'hubs'],
function ($, ko, komapping) {
ko.mapping = komapping; // Needed
var myChildModel = function (Id) {
this.activate = function () {
$.connection.hub.start().done(function () {
con.server.getDetails(Id).done(function (data) {
ko.mapping.fromJS(data, {}, this);
console.log(data);
});
});
};
};
return myChildModel;
});
我真的想要获取服务器返回并将其映射到 viewModel 本身,如上所示,因为我可以自动考虑服务器端数据的变化(不包括或相关的这一点),但由于在 binding 回调之前 viewModel 不存在
导致预期的错误:
无法处理绑定“文本:函数(){return Company}” 消息:公司未定义;查看:小部件/客户信息;模块编号: 小部件/客户信息
为了解决这个问题,我想停止 Knockout applyBindings,然后在我的服务器上手动调用它返回 .done 回调。
Durandal 文档确实说您可以停止绑定,但没有包含如何或是否可以在需要时手动应用绑定的示例。
之前有没有人能够部署这种技术,维护 viewModel 来自服务器,而不是创建然后水合,或者已经部署了具有相同结果的类似技术。
【问题讨论】:
标签: javascript knockout.js durandal