1

次のコードを使用すると、奇妙な問題が発生します。クリックして showVacationModal データを呼び出すと、サーバーからデータが正常に取得され、結果が正しく表示されます。同じ人(ID)をクリックし続けると、引き続き機能します。

休暇なしで別の人 (たとえば、別の ID) をクリックすると、何も表示されません = OK。

問題

最初の人をもう一度クリックしても、何も表示されません。(データは ajax 呼び出しで正常に取得されます)。

何か案は?

私のJSコード:

var ViewModel = function () {
        this.vacations = ko.mapping.fromJS(null);
    };

    var model = new ViewModel();


    function showVacationModal(id) {
        var model = {};
        $.ajax({
            type: "POST",
            url: "Default.aspx/GetVacations",
            data: "{personId: '" + id + "'}",
            delay: 1,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {

                model.vacations = ko.mapping.fromJS(msg.d);
                ko.applyBindings(model);


                $('#vacationModal').modal('show')
            }
        });

    }

私のHTML:

<table>
                <thead>
                    <tr>
                        <th>
                            First name
                        </th>
                        <th>
                            Last name
                        </th>
                    </tr>
                </thead>
                <tbody data-bind="foreach: vacations">
                    <tr>
                        <td data-bind="text: Id">
                        </td>
                        <td data-bind="text: PersonId">
                        </td>
                        <td data-bind="text: Begin">
                        </td>
                    </tr>
                </tbody>
            </table>
4

1 に答える 1

2

このようなことをもっと試しましたか?

function showVacationModal(id) {
    // var model = {}; no need to reset the model property
    $.ajax({
        type: "POST",
        url: "Default.aspx/GetVacations",
        data: { personId: id }, // why wrap data in strings?
        delay: 1,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {

            //model.vacations = ko.mapping.fromJS(msg.d);
            ko.mapping.fromJS(msg.d, {}, model.vacations);
            // ko.applyBindings(model); no need to reapply bindings

            $('#vacationModal').modal('show')
        }
    });
}

詳細については、この ko.mapping ドキュメント セクションを参照してください。

于 2012-09-30T15:27:57.257 に答える