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)代码>太神奇了。非常感谢:)