我试图弄清楚如何将Pager.js与Knockout.js结合使用,以延迟加载页面并绑定其内容。我正在尝试翻译演示示例,但我不熟悉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();
});我对代码进行了一些重构,以适应霍克的回答:
self.getExamHistory = function (f) {
$.getJSON("@{ExamHistoryR}", function (data) {
self.history = ko.mapping.fromJSON(data, {});
f(self.history);
});
}getJSON调用正在被触发(我在控制台中看到了响应),但viewModel.history仍然是空的。
发布于 2014-07-31 23:29:01
您对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函数的返回值,而不是函数本身。
https://stackoverflow.com/questions/25066036
复制相似问题