为什么只发出 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.computed
或 ko.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
被评估了三次。
- 初始化时(输出:
A-computed
)
- 当
dependency
更新为B
时(输出:B-computed
)
- 当
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
绑定冲突...
我的设置是这样的: 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.computed
或 ko.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
被评估了三次。
- 初始化时(输出:
A-computed
) - 当
dependency
更新为B
时(输出:B-computed
) - 当
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
绑定冲突...