我刚刚开始淘汰这个模型和viewmodel:
$(function() {
// Class to represent a note
function Note(title, content) {
var self = this;
self.title = ko.computed(function() {
var title = title;
if(title.length > 0) return title;
if(self.content && self.content.length > 0) return self.content.substring(0,19) + "...";
});
self.content = ko.observable(content);
}
// Overall viewmodel for this screen, along with initial state
function TaccuinoViewModel() {
var self = this;
// Editable data
self.notes = ko.observableArray([
]);
// Operations
self.addNote = function() {
self.notes.push(new Note());
}
self.removeNote = function(note) { self.notes.remove(note) }
}
ko.applyBindings(new TaccuinoViewModel());
});
问题在于计算属性:我想要做的是:
1-)如果标题的长度> 0使用它 2-)如果没有定义,请使用内容+“......”的前20个字符。
但这不起作用......
关于这样做的任何建议,还有其他方式吗?
答案 0 :(得分:4)
self.content
是一个可观察的,所以你需要调用它才能获得当前值:
self.content = ko.observable(content);
self.title = ko.computed(function() {
if(title.length > 0) return title;
var currentContent = self.content(); // <-- get the current value
if(currentContent) return currentContent.substring(0,19) + "...";
});
请注意,我已将可观察“内容”的创建移到顶部,因为在创建计算的observable时,其初始值会被计算一次 - 因此我们可能需要“content”可观察到。