Привет, у меня есть веб-приложение, я очень новичок в KnockOut.js
У меня есть JS COde
ko.applyBindings(new LOBViewModel());
//COMMENTED SECTION BINDS THE DATA TO HTML, BUT DOES NOT TRIGGER ONLICK EVENT
//function LOBViewModel() {
// var self = this;
// self.vm = {
// LOBModel: ko.observableArray()
// };
// GetLOB();
//
// self.DeleteRecord = function (lobmodel) {
// $.ajax({
// type: "POST",
// url: '/Admin/DeleteLOB',
// data : {LOB_ID : lobmodel.LOB_ID},
// success: function (data)
// {
// alert("Record Deleted Successfully");
// GetLOB();//Refresh the Table
// },
// error: function (error)
// {
// }
// });
// };
// function GetLOB() {
// $.ajax({
// url: '/Admin/GetLOB',
// type: "POST",
// dataType: "json",
// success: function (returndata) {
// self.vm.LOBModel = returndata;
// ko.applyBindings(self.vm);
// alert("Hello");
// },
// error: function () {
// }
// });
// };
//}
//UNCOMMENTED SECTION DOES NOT BIND THE DATA TO HTML
function LOBViewModel() {
var self = this;
self.LOBModel = ko.observableArray([]);
GetLOB();
self.DeleteRecord = function (lobmodel) {
$.ajax({
type: "POST",
url: '/Admin/DeleteLOB',
data: { LOB_ID: lobmodel.LOB_ID },
success: function (data) {
alert("Record Deleted Successfully");
GetLOB();//Refresh the Table
},
error: function (error) {
}
});
};
function GetLOB() {
$.ajax({
url: '/Admin/GetLOB',
type: "POST",
dataType: "json",
success: function (returndata) {
self.LOBModel = returndata;
alert(self.LOBModel.length);
},
error: function () {
alert("eRROR GET LOB");
}
});
};
}
Подробности My Json находится в следующем формате [0] => {LOB_ID: 0, LOB_Name: "data" LOB_description: "data"} [1] => и т.д.
Файл HTML
<tbody data-bind="foreach: LOBModel">
<tr>
<td data-bind="text:LOB_ID"></td>
<td data-bind="text: LOB_Name"></td>
<td data-bind="text: LOB_Description"></td>
<td><button data-bind="click: $root.DeleteRec">Delete</button></td>
</tr>
</tbody>
Мой вопрос:
почему это
vm
для привязки json к LOADModel, чтобы он работал, когда я использую self.LOBModel = ko.observableArray([]);
привязки не происходит. т.е. моя таблица не загружает данные.self.DeleteRec, $root.DeleteRec and just DeleteRec
. Хотя кажется очень очевидным, это просто не работает.lobmodel.LOB_ID
правильный способ использования?Чтобы ответить на вопрос по пунктам:
(1) Ваша проблема в функции GetLOB, в этой строке:
self.LOBModel = returndata;
При этом вы перезаписываете self.LOBModel = ko.observableArray([]). Вместо этого вы должны сделать следующее:
self.LOBModel(returndata);
Затем вы должны увидеть данные в своей таблице (если у вас нет других ошибок). Здесь следует помнить, что если вы делаете переменную наблюдаемой, вам всегда нужно использовать() -syntax для чтения или записи базового значения. Если вы используете = вместо этого, вы удаляете наблюдаемую функциональность.
(2) подход с "$ root.DeleteRecord" верен. "self.DeleteRecord" не будет работать, и ни один из них не будет просто DeleteRecord. То, что также будет работать, - $ parent.DeleteRecord. Кажется, проблема заключается в том, что вместо "DeleteRecord" вы выполняете "DeleteRec".
(3) ваш подход является правильным. Удалили мои комментарии по этому поводу, так как Ричард Далтон под мной сделал правильный комментарий, который делает недействительным то, что я набрал здесь.
Изменение: рабочий скрипт http://jsfiddle.net/LFgUu/4/