首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pager.js:如何延迟加载绑定

Pager.js:如何延迟加载绑定
EN

Stack Overflow用户
提问于 2014-07-31 18:09:10
回答 1查看 1.1K关注 0票数 0

我试图弄清楚如何将Pager.js与Knockout.js结合使用,以延迟加载页面并绑定其内容。我正在尝试翻译演示示例,但我不熟悉require.js,只是迷路了。

我花了几个小时试图使用jQuery的getJSON而不是requiredefine来重新实现系统,但是绑定失败了。我有两个问题:

  1. 视图模型是一个JSON数组,所以我不知道这个数组是什么
  2. 代码实际上没有执行getJSON请求(日志中没有任何内容)。却在默默地失败。

以下是代码:

代码语言:javascript
复制
<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();
});

我对代码进行了一些重构,以适应霍克的回答:

代码语言:javascript
复制
  self.getExamHistory = function (f) {
    $.getJSON("@{ExamHistoryR}", function (data) {
      self.history = ko.mapping.fromJSON(data, {});
      f(self.history);
    });
  }

getJSON调用正在被触发(我在控制台中看到了响应),但viewModel.history仍然是空的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-31 23:29:01

您对withOnShow回调函数做了错误的包装。

去掉包装,你应该会没事的:-)

代码语言:javascript
复制
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函数的返回值,而不是函数本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25066036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档