Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to set the page title by data-binding using Knockout.js?

Tags:

I have a viewModel with a Title property. I'd like to set the page title using that property. Here's what I tried already, which didn't work:

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

The browser title is blank/default instead of the value of my Title property.

like image 557
Byron Sommardahl Avatar asked Dec 27 '11 21:12

Byron Sommardahl


People also ask

What is data bind in KnockoutJS?

Knockout's declarative binding system provides a concise and powerful way to link data to the UI. It's generally easy and obvious to bind to simple data properties or to use a single binding.

What is two-way binding in KnockoutJS?

KO is able to create a two-way binding if you use value to link a form element to an Observable property, so that the changes between them are exchanged among them. If you refer a simple property on ViewModel, KO will set the form element's initial state to property value.

How do you bind data in JavaScript?

Data binding in concept is quite simple. On one side, you have a data model and on the other side, you have an interface, often called a view. The idea is that you want to “bind” some piece of data to something on the view so that when the data changes, the view changes. This is typical for read-only data.


1 Answers

Try giving your html element an id

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

and applying your viewModel to it

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

EDIT

This works for me; I just ran this page and the title said "Hello". Double check your code for typos.

<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> 

Screenshot:

enter image description here

like image 154
Adam Rackis Avatar answered Nov 02 '22 06:11

Adam Rackis