У меня есть 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
.
Попробуйте дать 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>
Скриншот:
Согласно предложению @ Дугласа, моим решением было добавить скрытое div
где-нибудь в теле, привязанном к вычисляемому значению:
<div data-bind="text: currentPageTitle()"></div>
Затем, в вычислении значения, я установил document.title
:
self.currentPageTitle = ko.computed(function() {
document.title = self.Title();
return self.Title();
}, this);
Это прекрасно работает для меня