0

我刚刚开始淘汰这个模型和视图模型:

$(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 个字符 + "..."

但这不起作用...

关于这样做的任何建议,还有其他方式吗?

4

1 回答 1

4

self.content是一个 observable,所以你需要调用它来获取当前值:

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 “内容”的创建移到顶部,因为在创建计算后的 observable 时,它​​的初始值会计算一次 - 所以我们可能需要存在 observable 的“内容”。

于 2012-04-24T16:16:26.687 回答