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は監視可能であるため、現在の値を取得するには、これを呼び出す必要があります。

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) + "...";   
});

オブザーバブルの作成を一番上に移動したことに注意してください。これは、計算されたオブザーバブルを作成するときに、その初期値が1回計算されるためです。したがって、「コンテンツ」オブザーバブルが存在する必要がある場合があります。

于 2012-04-24T16:16:26.687 に答える