Nor*_*ert 1 javascript knockout.js
我在页面上设置了以下选择以更改学期.当select检测到更改时,将changeSemesters触发该函数,该函数运行AJAX,该AJAX用特定于所选学期的数据替换页面上的当前数据.
视图
<select data-bind="options: semestersArr, optionsText: 'name', optionsValue: 'id', value: selectedSemester, event: { change: changeSemesters }"></select>
Run Code Online (Sandbox Code Playgroud)
视图模型
this.selectedSemester = ko.observable();
//runs on page load
var getSemesters = function() {
var self = this, current;
return $.get('api/semesters', function(data) {
self.semestersArr(ko.utils.arrayMap(data.semesters, function(semester) {
if (semester.current) current = semester.id;
return new Model.Semester(semester);
}));
self.selectedSemester(current);
});
};
var changeSemesters = function() {
// run ajax to get new data
};
Run Code Online (Sandbox Code Playgroud)
问题是select中的change事件在changeSemester页面加载时触发函数并设置默认值.有没有办法避免使用按钮?
通常,您希望在这些场景中使用手动订阅,以便您可以对可观察的更改做出反应而不是更改event.Observable只会在其值实际发生变化时通知.
所以,你会这样做:
this.selectedSemester.subscribe(changeSemesters, this);
Run Code Online (Sandbox Code Playgroud)
如果selectedSemester由于绑定而仍在更改,则可以将其初始化为默认值.
this.selectedSemester = ko.observable(someDefaultValue);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6256 次 |
| 最近记录: |