Knockoutjs имеет фокус на модальном - PullRequest
1 голос
/ 24 сентября 2019

Я не знаю, что я делаю неправильно, но моя привязка hasFocus к модалу не работает.Я посмотрел на этот пример jsfiddle , опубликованный @ jasper-tey, но когда я вытащил его из фрейма и записал как отдельную HTML-страницу, он не сработал.

Я отладил функцию setFocus и подтвердил, что в модели устанавливается значение isFocused.Кажется, что привязка верна, и парсер не кричит на меня.Тем не менее, модал не получает фокуса в моем коде, но, похоже, работает нормально в примере с jsfiddle.Любые указатели на то, что я пропускаю, будут наиболее цениться.

Вот мой код:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Input-focus in a Modalized Knockout Template</title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="robots" content="noindex, nofollow">
  <meta name="googlebot" content="noindex, nofollow">
  <meta name="viewport" content="width=device-width, initial-scale=1">

        <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">

        <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>
        <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
        <script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js"></script>

  <style id="compiled-css" type="text/css">
      .container {
    padding: 10px;
}
  </style>


</head>
<body>
    <div class="container">
    <h4>Input-focus in a Bootstrap Modal</h4>
    <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">Launch modal</button>
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                     <h4 class="modal-title" id="myModalLabel"></h4>

                </div>
                <div class="modal-body" data-bind="template: { name: 'bodyTemplateA'}"></div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary" data-bind="click: setFocus">Set Focus</button>
                </div>
            </div>
        </div>
    </div>
</div>
<script id="bodyTemplateA" type="text/html">
    <div class="form-group">
        <label>Name</label>
        <input type="text" class="form-control" data-bind="value: name, hasFocus: isFocused" />
    </div>
    <div class="form-group">
        <label>Type</label>
        <input type="text" class="form-control" data-bind="value: type" />
    </div>
</script>

  <script type="text/javascript">

    $(window).load(function(){

        function mainModel (){
                var self = this;
                self.name =  ko.observable("Blue border when in focus");
                self.type =  ko.observable();

                self.header =  ko.observable("This is a modal");
                self.body =  ko.observable('bodyTemplateA');

                self.isFocused =  ko.observable(false);

                self.setFocus = function() {
                        data.isFocused(true);
                }

        }

        var data = new mainModel();  
        ko.applyBindings(data);

        $('#myModal').on('shown.bs.modal', function(){
            data.isFocused(true);
        });


        });

  </script>


</body>
</html>

1 Ответ

0 голосов
/ 24 сентября 2019

Я изменил код и обновил импорт knockoutjs, с версии 2.2.1 до версии 3.1.0, и он заработал.

Код, который я изменил:

        var data = {
                // var self = this;
                name:  ko.observable(),
                type:  ko.observable(),

                header: ko.observable("This is a modal"),
                body: ko.observable('bodyTemplateA'),

                isFocused:  ko.observable(false),

                setFocus: function() {
                        data.isFocused(true);
                },

        }

        ko.applyBindings(data);

        $('#myModal').on('shown.bs.modal', function(){
            data.isFocused(true);
        });

Хотя я думаю, что библиотечная версия - та, которая вызывает проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...