Есть ли способ задать заголовок страницы путем привязки данных с помощью Knockout.js?

У меня есть viewModel с Title p Roperty. Я хотел бы установить заголовок страницы, используя это свойство. Вот то, что я уже пробовал, но это не сработало:

<html>
   <head>
   <title data-bind="text: Title"></title>
</head>
<body>
   <span data-bind="text: Title"/> <!-- this displays the title properly -->
</body>

Заголовок браузера пустой / по умолчанию вместо значения моего свойства Title .

24
задан Byron Sommardahl 27 December 2011 в 22:18
поделиться

2 ответа

Попробуйте дать html-элементу идентификатор

<html id="htmlTop" xmlns="http://www.w3.org/1999/xhtml">

и применить к нему свою viewModel

ko.applyBindings(viewModel, document.getElementById("htmlTop"));

РЕДАКТИРОВАТЬ

Это работает для мне; Я просто запустил эту страницу, и заголовок сказал «Привет». Дважды проверьте код на наличие опечаток.

<html id="htmlTop">

    <head>
      <title data-bind="text: title"></title>

      <script type='text/javascript' src='jquery.min.js'></script>
      <script type='text/javascript' src='knockout-1.2.1.js'></script>

      <script type="text/javascript">

          $(function () {
              var viewModel = { title: "Hello" };
              ko.applyBindings(viewModel, document.getElementById("htmlTop"));
          });

      </script>

    </head>

    <body>
    </body>
</html>

Скриншот:

enter image description here

20
ответ дан 29 November 2019 в 00:01
поделиться

Согласно предложению @ Дугласа, моим решением было добавить скрытое div где-нибудь в теле, привязанном к вычисляемому значению:

<div data-bind="text: currentPageTitle()"></div>

Затем, в вычислении значения, я установил document.title:

self.currentPageTitle = ko.computed(function() {
    document.title = self.Title();
    return self.Title();
}, this);

Это прекрасно работает для меня

0
ответ дан 29 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: