knockoutjs 调用一直在执行,我怎么只能调用一次?
knockoutjs call keeps executing, how can I call it only once?
我有这段代码:
t._teacherOptions = ko.observable();
function getTeacherList() {
$.ajax({
type: "POST",
url: "/webservices/Service.asmx/GetTeachers",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(i) {
if (i.d) {
console.log(i.d);
return t._teacherOptions(i.d);
}
},
error: function(n) {
u(n);
}
});
}
t.TeacherOptions = ko.computed(function() {
getTeacherList();
return t._teacherOptions();
});
然后是我的 html:
<select data-bind="options: $root.TeacherOptions(), value: Id, optionsText: 'Name'"></select>
不知道为什么,打开页面的时候,获取教师列表的函数一直循环不停。
我能够得到我需要的结果,但循环仍在继续,我需要停止它。我在这里做错什么了吗?
你无休止地循环,因为你的 TeacherOptions
(这是一个 computed
)访问 _teacherOptions
(因此创建了一个依赖项)并且因为你正在改变 _teacherOptions
在您的 Ajax 调用的 success
回调中,TeacherOptions
再次被评估(因为它取决于 _teacherOptions
)并发出 Ajax 请求再次.
尝试在 computed
之外调用 getTeacherList()
:
t._teacherOptions = ko.observable();
function getTeacherList() {
$.ajax({
type: "POST",
url: "/webservices/Service.asmx/GetTeachers",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(i) {
if (i.d) {
console.log(i.d);
return t._teacherOptions(i.d);
}
},
error: function(n) {
u(n);
}
});
}
getTeacherList();
t.TeacherOptions = ko.computed(function() {
return t._teacherOptions();
});
我有这段代码:
t._teacherOptions = ko.observable();
function getTeacherList() {
$.ajax({
type: "POST",
url: "/webservices/Service.asmx/GetTeachers",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(i) {
if (i.d) {
console.log(i.d);
return t._teacherOptions(i.d);
}
},
error: function(n) {
u(n);
}
});
}
t.TeacherOptions = ko.computed(function() {
getTeacherList();
return t._teacherOptions();
});
然后是我的 html:
<select data-bind="options: $root.TeacherOptions(), value: Id, optionsText: 'Name'"></select>
不知道为什么,打开页面的时候,获取教师列表的函数一直循环不停。
我能够得到我需要的结果,但循环仍在继续,我需要停止它。我在这里做错什么了吗?
你无休止地循环,因为你的 TeacherOptions
(这是一个 computed
)访问 _teacherOptions
(因此创建了一个依赖项)并且因为你正在改变 _teacherOptions
在您的 Ajax 调用的 success
回调中,TeacherOptions
再次被评估(因为它取决于 _teacherOptions
)并发出 Ajax 请求再次.
尝试在 computed
之外调用 getTeacherList()
:
t._teacherOptions = ko.observable();
function getTeacherList() {
$.ajax({
type: "POST",
url: "/webservices/Service.asmx/GetTeachers",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(i) {
if (i.d) {
console.log(i.d);
return t._teacherOptions(i.d);
}
},
error: function(n) {
u(n);
}
});
}
getTeacherList();
t.TeacherOptions = ko.computed(function() {
return t._teacherOptions();
});