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

Javascript Pager.js:如何延迟加载绑定,javascript,jquery,html,knockout.js,Javascript,Jquery,Html,Knockout.js,我正在试图弄清楚如何将Pager.js与Knockout.js结合使用,以延迟加载页面并绑定其内容。我正在尝试翻译,但我不熟悉require.js,只是迷路了 我花了几个小时试图使用jQuery的getJSON而不是require和define重新实现系统,但是绑定失败了。我有两个问题: 视图模型是一个JSON数组,所以我不知道这个数组叫什么 代码实际上没有执行getJSON请求(日志中没有任何内容)。并且在默默地失败 代码如下: <div data-bind="page: {id: 'h

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

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

  • 视图模型是一个JSON数组,所以我不知道这个数组叫什么
  • 代码实际上没有执行
    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();
    });
    

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

    您使用onshow回调函数对
    进行了错误的包装

    取下包裹物,你会没事的:-)


    Pager.js演示页面具有额外包装的原因是它使用
    with onshow:requireVM(“发明”)
    ,而不是
    with onshow:requireVM
    。它使用requireVM函数的返回值,而不是函数本身。

    Require.js和jQuery的getJSON方法是两个截然不同的东西。Require.js是一个异步加载模块的模块加载程序。getJSON get的JSON。投票关闭的人能提供建议吗?建议是继续学习和理解您试图使用的技术,而不是要求人们构建苹果===oranges@PWKad:require.js正在加载一个模块,然后显然使用“define”来定义一个可观察对象。它还使用了一种晦涩的风格,这正是问题所在。也没有必要光顾。我们中的一些人是注重结果的人。我们中的一些人对更换基础设施以适应框架不感兴趣。还要注意,Pager.js文档没有提到require.js作为依赖项,但他们选择使用它将模型注入代码中。我确实觉得我已经做了尽职调查,并且花了几个小时试图解码和重新实现jQuery版本。谢谢!我想我快到了。我现在看到的问题是getJSON请求被触发(我在javascript控制台中看到响应对象),但我的viewModel.history仍然为空:(没有检查。它是
    viewModel.history=ko.mapping.fromJS(数据);
    ,我认为
    fromJS
    没有将空对象作为选项,而是认为这是一个要更新的viewModel。更新的答案。忘记我的解释,我只是在控制台中进行了测试,有/没有第二个空参数没有任何区别。是的,谢谢。这也是一个问题,我已经解决了。但我也打破了它n通过将observable设置为'history'而不是$root.history来修改代码。您是否知道如何立即设置绑定,使其成为pager.js页面的“本地”绑定?(但是,也谢谢您!您救了我一命。)您可以尝试,但我认为如果
    历史记录
    是一个数组,您会遇到问题。您是否尝试使用组件击出3.2.0-beta版?因此,我停止使用Pager.js。
      self.getExamHistory = function (f) {
        $.getJSON("@{ExamHistoryR}", function (data) {
          self.history = ko.mapping.fromJSON(data, {});
          f(self.history);
        });
      }
    
    self.getHistory = function (f) {
      $.getJSON("@{HistoryR}", function (data) {
        self.history = ko.mapping.fromJS(data); // can u try self instead of viewModel
        f(self.history);
      });
    };