为什么只发出 1 AJAX 调用 return 2 GET 请求敲除和 jquery

Why issue only 1 AJAX call return 2 GET request knockout and jquery

我的设置是这样的: views/people 和 viewsModel/people.js 之间的敲除绑定 调用 AJAX 到 jsreport 服务器打印 PDF 的按钮 views/people

中的按钮
<button id="printPdf"
data-bind="ojComponent: {component: 'ojButton}">
</button>

在viewsModel/people.js中,对jsreport服务器的点击事件调用

self.someotherstuff = ko.pureComputed(function () {
......
//print button
self.print = $("#printPdf").click(function () {
$.getJSON(
//some logic
).then(function (){jsreport.serverUrl = 'http://localhost:5488';
var request = {
template: { 
"shortid":"rJPUhdmv"
 }};
 jsreport.render('_blank', request);       
 })
....
}

但是为什么总是收到2个GET请求而不是1个? 编辑: 整个打印按钮都在像上面这样的 purecomputed 里面

A ko.computedko.pureComputed 每次其依赖项之一发生更改时都会重新计算。这意味着您 不应在 pureComputed 的方法 .

中附加事件侦听器

另请注意,根据定义,pureComputed 不应有任何副作用。举个例子:

var counter = 0;
var dependency = ko.observable("A");

var myComputed = ko.computed(function() {
  counter += 1;
  return dependency() + "-computed";
});

dependency("B");
dependency("C");

console.log(counter); // Logs 3
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

如您所见,myComputed被评估了三次。

  1. 初始化时(输出:A-computed
  2. dependency更新为B时(输出:B-computed
  3. dependency更新为C时(输出:C-computed

您应该在视图模型中创建一个 onClick 方法,并使用 data-bind="click: onClick":

绑定它
self.onClick = function(data, event) {
  // Ajax stuff...
}

并且:

<button id="printPdf"
  data-bind="click: onClick, ojComponent: {component: ojButton}">
</button>

您没有显示您的自定义 ojComponent 绑定,所以我不能确定它是否与 click 绑定冲突...