0
在淘汰赛中可以折叠所有其他打开的行并只展开点击的行。展开一个元素并折叠所有其他元素在淘汰赛中js
我指的是这个Fiddle example。
视图 -
<ul data-bind="foreach: items"> <a href="#" data-bind="click: toggle, text:linkLabel"></a>
<button data-bind="text:name"></button>
<div data-bind="visible:expanded">
<input data-bind="value:name"></input>
</div>
</ul>
视图模型 -
function Sample(item) {
var self = this;
self.name = ko.observable(item.name);
self.id = ko.observable(item.id);
self.expanded = ko.observable(false);
self.toggle = function (item) {
self.expanded(!self.expanded());
};
self.linkLabel = ko.computed(function() {
return self.expanded() ? "collapse" : "expand";
}, self);
}
var viewModel = function() {
var self = this;
var json = [{
"name": "bruce",
"id": 1
}, {
"name": "greg",
"id": 2
}]
var data = ko.utils.arrayMap(json, function (item) {
return new Sample(item); // making things independent here
});
self.items = ko.observableArray(data);
};
ko.applyBindings(new viewModel());
这里它并没有崩溃已经打开行。我试图在切换功能中获取完整的项目,但它不起作用。
我是新来淘汰。请建议。
更新 -
我想这个代码,以使第一个默认扩展 -
var index=0;
var data = ko.utils.arrayMap(json, function(item) {
if(index++===0){
return new Sample(item,true);
}else{
return new Sample(item,false);
}
});
但上面给出的代码无法按预期工作。
非常感谢。很好的解释。有没有什么东西可以在淘汰赛中通过我们默认的第一个扩展。 –
最简单的方法可能是将if(self.items()[0])self.items()[0] .expanded(true)添加到viewmodel构造函数的底部。 – user3297291
如果你想在你的映射函数中做,你可以这样做:'json.map(function(item,index){return new Sample(item,!index)})'。除“0”以外的任何索引都将评估为“true”,因此只有第一个索引将被展开。 – user3297291