我知道这似乎太容易了,但我正在努力了解Knockout的工作原理。我究竟做错了什么 ?我需要为每个学生提供有关“注意”的数据,但我尝试的方法似乎并不起作用......我会感激任何帮助或建议。
<table data-bind="foreach: students">
<tr>
<th>ID</th>
<th>Nume</th>
<th>Prenume</th>
<th>Data</th>
</tr>
<tr>
<td><input type="text" size="1" data-bind="value: StudId" disabled="disabled"></td>
<td><input type="text" size="60" data-bind="value: Nume" disabled="disabled"></td>
<td><input type="text" size="60" data-bind="value: Prenume" disabled="disabled"></td>
<td>
<input type="text" size="15" data-bind="value: Data" disabled="disabled">
<input data-bind="click: $parent.deleteStudent.bind($parent, $data.StudId)" type="button" value="Sterge" class="button button1" id="sterge" />
<input data-bind="click: function() { $parent.loadNote.bind($parent, $data.StudId); alert(NotaId); }" type="button" class="button button2" value="Note" />
</td>
</tr>
</table>
淘汰赛:
<script type="text/javascript">
var uri = 'api/student';
var StudentsViewModel = function () {
this.students = ko.observableArray();
this.note = ko.observableArray();
this.loadNote();
this.loadStudents();
};
StudentsViewModel.prototype.loadStudents = function () {
var self = this;
$.getJSON(uri, function (data) {
self.students(data);
});
};
StudentsViewModel.prototype.loadNote = function (id) {
var self = this;
$.getJSON(uri + '/' + id, function (data) {
self.note(data);
});
};
// Apply bindings
ko.applyBindings(new StudentsViewModel());
当我按下每个学生的按钮时,为什么不显示“注意”?
答案 0 :(得分:1)
当您在某个函数上调用bind
时,该函数不会被称为 。相反,bind
会返回带有绑定this
上下文和可选绑定参数的 new 函数。
这意味着这个功能:
function() {
$parent.loadNote.bind($parent, $data.StudId);
alert(NotaId);
}
不会致电loadNote
。你需要另一组括号来调用新创建的函数:
$parent.loadNote.bind($parent, $data.StudId)();
最好不要在数据绑定中创建新功能,特别是如果你不熟悉淘汰赛。使用click
参数和bindingContext
可能会有点混乱。
我建议在您的viewmodel中添加onLoadNoteClick
方法,将绑定更改为click: onLoadNoteClick
,并在此方法中创建断点。然后,您可以检查arguments
以查看已通过的内容,并this
查看方法的上下文。
答案 1 :(得分:0)
在您的函数loadNote
中,设置var self=this;
如错误所示,当前闭包中没有note
函数。
尝试在构造函数中设置self
,但不要将其限制在构造函数范围内,以便稍后调用它。
var uri = 'api/student';
var self;
var StudentsViewModel = function () {
self=this;
this.students = ko.observableArray();
this.note = ko.observableArray();
this.loadNote();
this.loadStudents();
};