2012-04-25 53 views
2

我有两个属性的模型:标题和内容,我想要做的是:淘汰赛:写作和阅读计算性能

如果标题具有值,使用它,但如果它是空白使用第一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尼迈耶唯一的问题答案是我必须只有在阅读/写作的财产,这是可能的吗?

回答

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 
    }); 
}​ 
+0

抱歉,但我需要一个属性来显示/写而不是两个,这可能吗? – 2012-04-26 14:56:32

+2

我不确定你的具体要求,但有几种方法可以使它看起来好像有一个属性。这里是真正的观察者是私人的:http://jsfiddle.net/rniemeyer/LFzzq/。这里是你使用子观察值进行显示的地方:http://jsfiddle.net/rniemeyer/LFzzq/3/当你将它转换成JSON发送回服务器时,它自然会丢失。 – 2012-04-26 15:11:07

+0

我的问题是我打算使用带contentEditable =“true”的div,因此输入也是输出,它不能是可观察的,而是计算的属性,因为标题可能会更改 – 2012-04-26 15:49:53