0

Javascript (Signalr) 関数が起動されたときに、knockoutjs を使用して Html ビューを更新します。producthub.client.showOnlineUserただし、が呼び出されてもビューは更新されません。テーブルに同じコンテンツが複数回含まれるたびにバインディングを適用すると。ノックアウトjsでビューを更新するにはどうすればよいですか?

HTML:

<table id="usersTable">
    <thead>
        <tr>
            <th>Name</th>
            <th>Mail</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: seats">
        <tr>
            <td data-bind="text: NameFirst"></td>
            <td data-bind="text: Mail"></td>
        </tr>
    </tbody>
</table>

Javascript:

$(document).ready(function () {
     var applied = false;
     var model;
     producthub.client.showOnlineUser = function (userOnlineOnUrl, msg1) {
        function ReservationsViewModel() {
            var self = this;
            self.seats = ko.observableArray(userOnlineOnUrl);
        }

        model  = new ReservationsViewModel();
        if (!applied) {
            ko.applyBindings(model);
            applied = true;
        }

    };
});

userOnlineOnUrl関数呼び出しごとにデータを変更する JSON-Array です。ビュー (テーブル) はそのデータで更新されません。

4

1 に答える 1

1

関数で更新するたびにモデルを呼び出さないようにしてください

  $(document).ready(function () {
          var applied = false;
          var model;
          function ReservationsViewModel() {
                    var self = this;
                    self.seats = ko.observableArray();
                }
          model = new ReservationsViewModel();
          ko.applyBindings(model);
          applied = true;

          producthub.client.showOnlineUser = function (userOnlineOnUrl, msg1) {                   
                model  = new ReservationsViewModel();
                //remove the previous data in array
                model.seats.removeAll();
                //Add new data to array 
                model.seats(userOnlineOnUrl);

                $('#onlineUsers').append(msg1);
            };
        });
于 2013-02-14T13:47:17.373 に答える