簡體   English   中英

如何在正確的上下文中引用Knockout.js對象和對象數組

[英]How to refer Knockout.js objects and array of objects in right context

我似乎無法正確理解: http : //jsfiddle.net/dPyQy/4/

我想收集在輸入字段中輸入的標簽以進行保存。 我需要像在RL中一樣將Textbatches引用為SelectedText,我需要能夠在Textbatches中進行選擇。

var Textbatch = function (data,tags) {
    var self = this;

    self.TextbatchId = data.TextbatchId;
    self.Title = ko.observable(data.Title);
    self.Text = ko.observable(data.Text);
    self.TextTags = ko.observableArray(tags);

    function createTypeComputed(tagType) {
        return ko.computed(function () {
            return ko.utils.arrayFilter(self.TextTags(), function (item) {
                return item.Type() == tagType;
            });
        });
   }

   self.managerTags = createTypeComputed(0);

   self.removeTag = function (tagToRemove) {
       self.TextTags.remove(function (item) {
           return item.Id == tagToRemove.Id;
       });
   }
}

掙扎於上下文,對象以及一切。 我希望所選標簽列在輸入字段下方,然后進行調試以顯示更新的對象。

任何幫助,高度贊賞。 感謝名單。

managerTags計算結果為數組,但是您正在text綁定中使用它,希望它計算結果為字符串。

您想如何顯示它? 作為HTML列表(使用foreach綁定來循環標記),還是作為逗號(或其他內容)分隔的字符串(在其上使用join )?

要獲得逗號分隔的字符串, createTypeComputed更改為

function createTypeComputed(tagType) {
  return ko.computed(function () {
    return ko.utils.arrayMap(      
      ko.utils.arrayFilter(self.TextTags(), function (item) {
         return item.Type() == tagType;
      }),
      function (item) {
        return item.Name();
      }).join(',');
    });
}

請注意,如果您可以指望使用ES5瀏覽器(IE <9以外的任何瀏覽器),則可以簡化用於

    return self.TextTags().filter(function (item) {
        return item.Type() == tagType;
      })
      .map(function (item) {
        return item.Name();
      })
      .join(',');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM