Я работаю над нокаутом и проблемами. ниже - мой.js-код и ko.applyBindings(viewModel);
полностью вниз под document.ready и его вообще не работает. он работает только при добавлении
ko.applyBindings(viewModel);
в боковом методе $ ('# dtTable tbody'). on ('click', 'tr', function(). Пожалуйста, предложите, в чем проблема, если я поместил свой код внутри строки таблицы данных, щелкнув, строка или такая же ошибка строки приходит "мы не можем определить привязку несколько раз". Пожалуйста, сообщите мне вопрос в коде и 2-й, куда я должен поставить привязки привязки
/// <reference path="knockout-3.1.0.debug.js" />
$(document).ready(function () {
var viewModel = new function () {
this.firstname = ko.observable();
this.lastname = ko.observable();
};
$('#dTable').dataTable({
"scrollY": 300,
"scrollCollapse": true,
"jQueryUI": true
});
var selectedRow;
$('#dTable tbody').on('click', 'tr', function () {
$(this).toggleClass('selected');
selectedRow = $(this).closest('tr');
viewModel.firstname = selectedRow.context.cells(0).innerHTML;
viewModel.lastname = selectedRow.context.cells(1).innerHTML;
});
$('#btnSaveChanges').click(function () {
var saveRequest = new Object();
saveRequest.FirstName = viewModel.firstname;
saveRequest.LastName = viewModel.lastname;
$.ajax({
async: true,
type: 'POST',
url: '/Person/GetPerson',
data: JSON.stringify(saveRequest),
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function (result) {
if (result == true) {
alert("Division saved successfully!");
if ($("#clickedButton").val() == "Add") {
AddNewRowToDataTable(saveRequest);
}
else {
UpdateRowToDataTable();
}
}
else {
alert("did not save!");
}
}
});
});
var t = $('#dTable').DataTable();
$('#btnAdd').on('click', function () {
$("#clickedButton").val("Add");
viewModel.firstname = "";
viewModel.lastname = "";
});
function AddNewRowToDataTable(saveRequest) {
t.row.add([
saveRequest.FirstName,
saveRequest.LastName,
]).draw();
}
function UpdateRowToDataTable() {
selectedRow.context.cells(0).innerHTML = viewModel.firstname;
selectedRow.context.cells(1).innerHTML = viewModel.lastname;
}
ko.applyBindings(viewModel);
});
Спасибо и жду ответа
viewModel.firstname
и viewModel.lastnames
являются наблюдаемыми. Вы присваиваете им значения...
viewModel.firstname(selectedRow.context.cells(0).innerHTML);
viewModel.lastname(selectedRow.context.cells(1).innerHTML);
Когда вы используете оператор присваивания, вы по существу переписываете наблюдаемое с чем-то другим. Представление все еще ko.applyBindings()
к наблюдаемым при первом ko.applyBindings()
, поэтому значение не изменяется до тех пор, пока вы снова не примените привязки (что вам не нужно делать).
Как только эти назначения будут исправлены, возникнет проблема с этим кодом...
saveRequest.FirstName = viewModel.firstname;
saveRequest.LastName = viewModel.lastname;
Если firstname
и lastname
являются наблюдаемыми, вам нужно получить доступ к их значениям, вызвав их...
saveRequest.FirstName = viewModel.firstname();
saveRequest.LastName = viewModel.lastname();