нокаут не работает по документу.

0

Я работаю над нокаутом и проблемами. ниже - мой.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);

});

Спасибо и жду ответа

Теги:
knockout.js

1 ответ

1
Лучший ответ

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(); 
  • 0
    Огромное спасибо за его работу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню