淘汰赛:写作和阅读计算属性

Mat*_*zzi 2 javascript knockout.js

我有一个带有两个属性的模型:标题和内容,我想要做的是:

如果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;
          }
        });
       }
Run Code Online (Sandbox Code Playgroud)

标题值从内容中正确更新但是(对我而言)直接在标题工作上进行编写是不可能的..

RP Niemeyer答案中唯一的问题是我必须只拥有阅读/写作的财产,这可能吗?

RP *_*yer 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
    });
}?
Run Code Online (Sandbox Code Playgroud)

  • 我不确定您的确切要求,但有几种方法可以使它看起来好像有一个属性.这是一个真正的可观察者是私人的:http://jsfiddle.net/rniemeyer/LFzzq/.下面是您使用sub-observable进行显示的地方:http://jsfiddle.net/rniemeyer/LFzzq/3/当您将其转换为JSON以发送回服务器时,它会自然地丢失. (2认同)