【问题标题】:Observable override toString() [closed]可观察的覆盖 toString() [关闭]
【发布时间】:2016-02-11 12:19:27
【问题描述】:

我正在将一个 KnockoutJS 可观察对象(它跟踪整个对象)绑定到一个带有“值”绑定的选择标记,我想知道是否有可能以某种方式获得该选定可观察对象的文本表示?

这是我绑定到的示例对象

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>

【问题讨论】:

  • 包含一些代码。你认为模型是什么样的?你的装订是什么样的?你读过淘汰赛文档吗?
  • 看看computed observables - 你可以写一个,它会在你的observble中返回一个对象的文本表示,并在底层事物发生变化时更新任何绑定到它的东西。或者在您的对象本身上创建一个可观察的属性,如有必要,可能再次计算。
  • @MattBurland 是的,我已阅读文档。由于我找不到适合我要求的解决方案,所以我在这里发布了一个问题。
  • @JamesThorpe 是正确的(可能应该将该评论变成答案)。目前,您将 Property1 作为对象的文本表示,至少在您的 select 的上下文中,您可以引入 AsText 计算的 observable 来接管该功能。
  • @Jeroen 我又回到了最忙的事情中 - 随意,你会得到我的投票...!

标签: javascript select knockout.js tostring observable


【解决方案1】:

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

您的问题中的代码很少,但您目前似乎只使用了其中一个 observables。如果您打算创建一个组合多个 toString,您可以考虑使用计算的 observable。如果你有合适的视图模型,带有构造函数或其他形式的继承,这是最简单的。这是一个例子:

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)
});
<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>

【讨论】:

    猜你喜欢
    • 2020-03-09
    • 2016-05-23
    • 2015-03-13
    • 2018-07-17
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多