我试图弄清楚如何将Pager.js与Knockout.js一起使用来延迟加载页面并绑定其内容。我正在尝试翻译demo example,但我不熟悉require.js
,我只是迷路了。
我花了几个小时尝试使用jQuery的getJSON
代替require
和define
来重新实现系统,但绑定却默默地失败了。我有两个问题:
getJSON
请求(日志中没有任何内容)。并且默默地失败了。以下是代码:
<div data-bind="page: {id: 'history', title: 'History', withOnShow: $root.getHistory }">
var ViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.getHistory = function () {
return function (f) {
$.getJSON("@{HistoryR}", function (data) {
viewModel.history = ko.mapping.fromJS(data, {});
f(viewModel.history);
});
}
}
};
$.getJSON("@{HomeR}", function (data) {
viewModel = new ViewModel(data);
pager.extendWithPage(viewModel);
ko.applyBindings(viewModel);
pager.start();
});
我重新编写了一些代码,以适应huocp的回答:
self.getExamHistory = function (f) {
$.getJSON("@{ExamHistoryR}", function (data) {
self.history = ko.mapping.fromJSON(data, {});
f(self.history);
});
}
并且getJSON调用被触发(我在控制台中看到响应),但我的viewModel.history仍为空。
答案 0 :(得分:1)
你对withOnShow
回调函数进行了错误的换行。
取下包裹,你应该没问题: - )
self.getHistory = function (f) {
$.getJSON("@{HistoryR}", function (data) {
self.history = ko.mapping.fromJS(data); // can u try self instead of viewModel
f(self.history);
});
};
带有额外换行的Pager.js演示页面的原因是它使用withOnShow: requireVM('invention')
,而不是withOnShow: requireVM
。它使用requireVM函数的返回值,而不是函数本身。