Data binding 如何使用Knockout访问绑定对象实例的属性

Data binding 如何使用Knockout访问绑定对象实例的属性,data-binding,knockout.js,Data Binding,Knockout.js,我不知道如何获取绑定项的属性。当存在.name()时,以下操作不起作用 <span data-bind='text: selectedMenuSection().name()'></span> 是否无法访问数据绑定对象属性,或者我只是不知道如何执行此操作?能否尝试以下操作: <span data-bind="with: selectedMenuSection"> <span data-bind="text: name"></span

我不知道如何获取绑定项的属性。当存在.name()时,以下操作不起作用

<span data-bind='text: selectedMenuSection().name()'></span>

是否无法访问数据绑定对象属性,或者我只是不知道如何执行此操作?

能否尝试以下操作:

<span data-bind="with: selectedMenuSection">
    <span data-bind="text: name"></span>
</span>


第一行确保仅当selectedMenuSection不为null或未定义时,内部范围才存在(创建self.selectedMenuSection时,其值未定义,这可能会在尝试访问name属性时导致错误)。第二行是您的原始绑定。最后不需要使用
()
,因为您需要绑定到可观察对象(您只需要
()
来访问可观察对象的当前值,或者如果您绑定到复杂语句而不是直接绑定到可观察对象)。

菜单操作看起来像什么?我假设它有一个name属性,它不是可观察的。汉斯的答案是解决你问题的正确方法。理解javascript对象,理解编写淘汰html时所处的“上下文”是非常重要的

with绑定将根元素(传递到ko.applyBindings中的对象)的上下文更改为selectedMenuSection的上下文。因此,在“使用”上下文(所有情况下都是数据)的内部是一个菜单操作。如果您对上下文中的对象非常好奇,您可以这样做:

    <div data-bind="with: selectMenuSection">
        <pre data-bind="text: ko.toJSON($data)></pre>
        <span data-bind="text: name"></span>
    </div>


这确实有效,但我现在可以让我的代码发挥作用,这一切让我更多地思考击倒和它是如何工作的。我发现,如果我放置以下self.selectedMenuSection=ko.observable(菜单[0]),我的代码就能工作;在中,但如果执行此操作,则不起作用。self.selectedMenuSection=ko.observable(self.leftMenu[0]);这是因为self.leftMenu是一个可观察(数组),您需要的是底层值:self.leftMenu()[0]。使用knockout,最大的诀窍是知道何时需要可观察的,何时需要值。是的,Matthew,MenuAction有一个name属性,但它是可观察的。谢谢你的跟进……我很好奇@Hans语句“最大的诀窍是知道什么时候需要可观察值,什么时候需要值”也让我感到更奇怪。在绑定中,如果只是使用值,则不需要访问值(例如:data bind='visible:isVisible')。但是,如果您正在进行任何计算,您需要指定您想要的值(例如:data bind='visible:isVisible()| | isAdmin()'),希望这会有所帮助。
<span data-bind="with: selectedMenuSection">
    <span data-bind="text: name"></span>
</span>
    <div data-bind="with: selectMenuSection">
        <pre data-bind="text: ko.toJSON($data)></pre>
        <span data-bind="text: name"></span>
    </div>