可观察的覆盖toString()

时间:2015-11-10 15:05:44

标签: javascript select knockout.js tostring observable

我正在将一个KnockoutJS observable(它跟踪整个Object)绑定到一个带有'value'绑定的select标签,我想知道是否有可能以某种方式获得所选Observable的文本表示?

这是我绑定到

的示例对象
var dogObject = ko.observable({
   Property1 = ko.observable(),
   Property2 = ko.observable(),
   .
   .
   .
})

以下是选择标记:

<select class="textbox" data-bind="options: collectionOfDogObjects(), optionsCaption: 'Select...', optionsValue: $data, optionsText: 'Property1', value: dogObject"</select>

1 个答案:

答案 0 :(得分:1)

执行此操作的选项已经包含在您的代码中:使用optionsText指定哪个属性 对象的toString表示。

您的问题代码很少,但看起来您目前只使用其中一个可观察对象。如果你想创建一个组合了几个的toString,你可以考虑使用一个计算的observable。如果您有具有构造函数或其他形式的继承的适当视图模型,这是最简单的。这是一个例子:

&#13;
&#13;
var Dog = function(data) {
  var self = this;
  self.Property1 = ko.observable(data.p1);
  self.Property2 = ko.observable(data.p2);
  self.toString = ko.computed(function() {
    return self.Property1() + " " + self.Property2();
  });
};

ko.applyBindings({
  collectionOfDogObjects: ko.observableArray([
    new Dog({ p1: "German", p2: "Shephard" }),
    new Dog({ p1: "Russian", p2: "Snowdog" })
  ]),
  dogObject: ko.observable(null)
});
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<select data-bind="options: collectionOfDogObjects(), optionsCaption: 'Select...', optionsValue: $data, optionsText: 'toString', value: dogObject"></select>
&#13;
&#13;
&#13;