2012-04-25 54 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