【问题标题】:Pager JS parameters and KnockoutPager JS 参数和 Knockout
【发布时间】:2013-10-17 14:20:15
【问题描述】:

我在我的 Web 应用程序中使用 Pager JS、Knockout 和 Jquery。这是代码

function ViewModel(){
  var self = this;

  self.interior = ko.observable();
  self.interior.background = ko.computed(function() {
    $.getJSON('/interiors', {interior_id:  self.interior_id()}).success(function(data) {
      return self.interior.background = data.interior.background_url;
    });
  }, this);

}

$(document).ready(function () {

  pager.Href.hash = "#!/";
  viewModel = new ViewModel();
  pager.extendWithPage(viewModel);
  ko.applyBindings(viewModel);
  pager.start();

});

执行代码时出现以下错误:

Uncaught TypeError: Object #<ViewModel> has no method 'interior_id' 

我知道这个变量还不存在,她也没有方法。但是如何解决这个错误呢?

【问题讨论】:

  • 不要调用不存在的函数?你想做什么?
  • 所以我想做 - 当参数 'interior_id' 改变时,从 JSON 页面获取数据并更新 'interior' 变量。也许你有什么建议?
  • 但是您的视图模型中甚至没有一个名为“interior_id”的属性或可观察对象?
  • 是的。我不。此参数由 PagerJS 在加载 Pager 时在视图模型中创建。

标签: javascript jquery json knockout.js pager


【解决方案1】:

如果稍后将interior_id 添加到您的视图模型中,那么您可以在ko.computed 上使用deferEvaluation 选项,因此它仅在访问background 属性时才评估其功能,而不是当您的ViewModel 被访问时创建:

self.interior.background = ko.computed(function() {
    //do stuff
}, this, {deferEvaluation: true});

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 2014-08-16
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2017-10-12
    • 2021-08-20
    • 2014-07-09
    相关资源
    最近更新 更多