我有一个包含两个属性的模型:标题和内容,我想要做的是:
如果title有一个值,请使用它,但如果它是空白的,请使用内容中的前20个字符+“...”。
这是模型:
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;
}
});
}
标题值从内容中正确更新但是(对我来说)直接在标题工作上写作是不可能的..
RP Niemeyer回答的唯一问题是我必须只拥有阅读/写作的财产,这可能吗?
答案 0 :(得分:10)
创建可写的计算observable时,您需要一个单独的observable来包含实际的标题。
更像是:
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
});
}