Javascript 尝试在for-each循环中操纵单个元素的每个的敲除绑定

Javascript 尝试在for-each循环中操纵单个元素的每个的敲除绑定,javascript,knockout.js,Javascript,Knockout.js,在for-each绑定中,我如何尝试切换单个p元素而不是for-each绑定中的所有p元素,希望不要太混乱:) var外壳模型={ 可观测的。。。。。, somefunction:function(){ …在这里,我需要切换p2(显示开/关),但不是全部,只需单击一次,或者更确切地说,切换下面的p } } 您可以将$index传递给您的函数,以了解单击的是哪一个,并采取相应的行动: <p data-bind="click:somefunction($index)" class="p1

在for-each绑定中,我如何尝试切换单个p元素而不是for-each绑定中的所有p元素,希望不要太混乱:)


var外壳模型={ 可观测的。。。。。, somefunction:function(){ …在这里,我需要切换p2(显示开/关),但不是全部,只需单击一次,或者更确切地说,切换下面的p } }
您可以将
$index
传递给您的函数,以了解单击的是哪一个,并采取相应的行动:

<p data-bind="click:somefunction($index)" class="p1"> </P>

self.someFunction = function(index){
    alert("Click on item number: " + index); 
};

self.someFunction=函数(索引){ 警报(“单击项目编号:“+索引”); };
如果更改可见性是视图的一部分,那么它应该是视图模型的一部分

一旦你这样做了,事情就会自行解决

function ItemViewModel() {
    var self = this;

    self.isExpanded = ko.observable(false);

    self.toggle = function () {
        self.isExpanded(!self.isExpanded());
    };
}

function MainVievModel() {
    var self.this;

    self.items = ko.observableArray([ /* instances of ItemViewModel*/]);
}



停止思考“我想切换第二个
”。想一想“我想在展开状态和折叠状态之间切换项。”然后再对其进行可视化表示,例如使用
可视化
绑定。

我本来想添加一个自定义绑定,但您的方法更简洁,因为我不需要尝试从数组中查找ID,非常好,谢谢Diana.Tomalak,我正在使用可视绑定,并且在应用程序中使用了类似于elswhere的东西,效果很好,但是当有一个项目列表,并且有很多p2时,我如何使用可视绑定来打开所有p2,顺便问一下self.isExpanded(!self.isExpanded());只需反转值,很酷的方式,如果通常存在,我会这样做,但您仍然会想到您的
div.p2
。不要那样做。如果有许多项,则编写一个函数来迭代这些项,并切换它们的
isExpanded
属性(在我的示例中,它将是
MainVievModel
的一个方法)。当
isExpanded
为true时出现
div.p2
的事实是次要的。这完全是你的观点。你的任务是操纵视图模型。我明白你的意思了,因为for-each是一个数组,ixexpanded属性真的很独特,现在有点乱,谢谢你的指针!
function ItemViewModel() {
    var self = this;

    self.isExpanded = ko.observable(false);

    self.toggle = function () {
        self.isExpanded(!self.isExpanded());
    };
}

function MainVievModel() {
    var self.this;

    self.items = ko.observableArray([ /* instances of ItemViewModel*/]);
}
<div data-bind="foreach: items">
    <p data-bind="click: toggle" class="p1"> </p>
    <p data-bind="visible: isExpanded" class="p2"></p>
</div>