Knockout: writing and reading a computed property

javascript, knockout.js

Solution

When creating your writeable computed observable, you will want to have a separate observable to contain the actual title.

More like:

function Note(title, content) {
    var self = this;

    self.content = ko.observable(content);
    self.title = ko.observable(title);

    self.displayTitle = ko.computed({
        read: function() {
            var title = self.title();
            if (!title) {
                var content = self.content();
                if (content) return content.substring(0, 19) + "...";
            }

            return title;
        },
        write: self.title
    });
}​

Problem

I have a model with two property: title and content and what I want to do is: If title has a value, use it but in case it's blank use the first 20 chars + "..." from content. This is the model: ``` function Note(title, content) { var self = this; self.content = ko.observable(content); self.title = ko.computed({ read: function(){ if(!title){ var content = self.content(); if(content) return content.substring(0,19) + "..."; } }, write: function(title){ return title; } }); } ``` Title value gets correctly updated from content but it's impossible (for me) to get writing directly on title working.. The only problem in RP Niemeyer answer is that i must have only on property for reading/writing, is that possible?

Original source