Javascript KnockoutJS:无法使用索引访问可观察数组的值

Javascript KnockoutJS:无法使用索引访问可观察数组的值,javascript,knockout.js,Javascript,Knockout.js,我正在尝试更改复杂对象项的标志值。 对象结构是: modelData [0]: Main: xz1 Sub: a,b,c,d,e show: true [1]: Main: xs1 Sub: g,h,i,j,k show: false 我需要访问此对象并切换标志值,如果为真,我必须将其更改为假,如果为假,则意味着我必须将其设置为真 我试过的代码 toggleShow: funct

我正在尝试更改复杂对象项的标志值。 对象结构是:

modelData 
    [0]: 
        Main: xz1
        Sub: a,b,c,d,e
        show: true
    [1]:
        Main: xs1
        Sub: g,h,i,j,k
        show: false
我需要访问此对象并切换标志值,如果为真,我必须将其更改为假,如果为假,则意味着我必须将其设置为真

我试过的代码

toggleShow: function (item) {
          var index = modelData.indexOf(item);
          modelData[index].show = item.show ? false : true; // should get work but not :(
}
函数中的项数据为

item
{...}
    __proto__: {...}
    Main: "AXD"
    Sub: [ fg,jk,ik,ko]
    show: true
modelData是一个可观察的数组

modelData
function observable() {
        if (arguments.length > 0) {
            // Write

            // Ignore writes if the value hasn't changed
            if (observable.isDifferent(_latestValue, arguments[0])) {
                observable.valueWillMutat
    [Methods]: {...}
    __proto__: {...}
    _id: 168
    _latestValue: [[object Object]]
    _subscriptions: {...}
    arguments: null
    caller: null
    length: 0
    prototype: {...}
通过使用该_latest值,我可以获取对象内容

modelData._latestValue
[[object Object]]
    __proto__: []
    length: 1
    [0]: {...}
但我无法使用索引访问此文件。请告诉我哪里出了问题,为什么我不能使用元素的索引访问值

编辑:

现在我可以切换标志值。但是一旦标志值更新了我的列表,视图就不会得到更新。请找到我的小提琴 输出:

若我点击那个加号,那个么子列表应该隐藏起来。如果我再次单击该加号,它将再次显示子列表

任何建议都会有帮助。

您必须将调用
modelData
的底层数组作为一个没有参数的函数来获取

因此,您需要在
[索引]
之前添加
()

toggleShow: function (item) {
          var index = modelData.indexOf(item);
          modelData()[index].show = item.show ? false : true; 
}
注意:没有
()
,因为它是为observableArray额外实现的,但索引器不是

为了查看UI上的更改,您必须将
show
属性转换为
ko.observable
,并且需要使用以下内容对其进行更新:

toggleShow: function (item) {
          var index = modelData.indexOf(item);
          modelData()[index].show(item.show() ? false : true); 
}
您的更新代码:

您必须将调用
modelData
的底层数组作为一个没有参数的函数来获取

因此,您需要在
[索引]
之前添加
()

toggleShow: function (item) {
          var index = modelData.indexOf(item);
          modelData()[index].show = item.show ? false : true; 
}
注意:没有
()
,因为它是为observableArray额外实现的,但索引器不是

为了查看UI上的更改,您必须将
show
属性转换为
ko.observable
,并且需要使用以下内容对其进行更新:

toggleShow: function (item) {
          var index = modelData.indexOf(item);
          modelData()[index].show(item.show() ? false : true); 
}
您的更新代码:

我们可以写
modelData()[index].show=!(modelData()[index].show)
要切换它吗?我的意思是它更好吗?是的,我已经检查过了。但现在,一旦切换了该标志值,我的视图就不会得到更新。你能检查一下我的小提琴吗。我附上了有问题的小提琴。谢谢much@MJSuriya您必须将
show
属性转换为
ko。可观察的
。在这种情况下,您必须编写:
modelData()[index].show(item.show()?false:true)太神奇了。非常感谢:)我们可以写
modelData()[index].show=!(modelData()[index].show)
要切换它吗?我的意思是它更好吗?是的,我已经检查过了。但现在,一旦切换了该标志值,我的视图就不会得到更新。你能检查一下我的小提琴吗。我附上了有问题的小提琴。谢谢much@MJSuriya您必须将
show
属性转换为
ko。可观察的
。在这种情况下,您必须编写:
modelData()[index].show(item.show()?false:true)太神奇了。非常感谢:)