【发布时间】:2012-11-01 15:46:37
【问题描述】:
使用 knockoutjs,我正在尝试映射大量复杂的数据。我正在使用显示模块模式。
为了使对象的所有元素都可观察,我使用了映射插件。但是,我遇到了一个问题:我在任何地方都找不到使用 ko.mapping.fromJS() 的示例,其中一些初始数据 not 映射到 viewmodel 对象上,但稍后映射,之后 - 在我的情况下 - 进行了 ajax 调用并检索了一些数据。也就是说,我没有任何初始数据,因此需要初始映射充满空值、空值或默认值。
这是任何地方唯一相关的信息
Knockout JS mapping plugin without initial data / empty form
但这并不能真正解决同样的问题——或者至少,我不能让它解决同样的问题。
这大概是我得到的代码。
var viewModel = function(){
var farmyard = *** What?? ***;
var refreshData = function(){
var temp = null;
$.ajax(
// awesome server call etc
success: function(data){
temp = data;
}
);
ko.mapping.fromJS(temp, farmyard);
};
return{
farmyard: farmyard,
refreshData: refreshData
}
};
$(function(){
var vm = new viewModel();
ko.applybindings(vm);
$('#something).on('click',function(){
vm.refreshData();
});
});
所以,我的问题是,这个对象的初始加载是什么?目前我不得不设置空对象来完成这项工作,手动编码每个对象的每个元素,并且如前所述,被映射的对象层次结构庞大而复杂,所以这并不理想。非常感谢任何帮助。
谢谢。
【问题讨论】:
-
我很好奇为什么你不能在第一页请求中发送一个实际的空视图模型?或者,如果数据确实是单独的,则在您首先获取初始视图模型的同时执行绑定,而不是在 DOM 就绪上。
-
感谢您的评论。我最初是在对象可用时执行数据绑定(即,在 ajax 请求之后),但这会导致问题,因为每次调用 ajax 时(即在单击事件上)它都会调用 ko.applyBindings()。但是,您评论的第一部分确实是我应该做的,而且如此明显……我认为树木的真正木材。谢谢。
标签: javascript asp.net-mvc knockout.js knockout-mapping-plugin