私はノックアウト 2.2.1 を使用しており、データを表形式 (表ではなく div を使用) で表示するページがあり、3 つの列があります。左の列には「もっと見る」リンクがあり、クリックすると中央の列が展開されます。
HTML:
<div data-role="page" data-title="Search" role="main" id="caspSearch" >
<header>
<h2 >Search Results:</h2>
<span>mobilty fy13</span>
<p>(<span>25</span>)</p>
</header>
<div class="caspGrid cafeClear">
<div class="caspRow">
<div class="caspColEntity">
<span>Favorites</span>
<p>(<span>2</span>)</p>
</div>
<div class="caspColSummary">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
</div>
<div class="caspColTeam">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
</div>
</div>
<!-- .caspRow -->
<div class="caspRow">
<div class="caspColEntity">
<span>Strategies</span>
<p>(<span>5</span>)</p>
<!-- WHEN CLICKING THIS I WANT THE DIV WITH VISIBLE BINDING (in .caspColSummary) TO SHOW, BUT IT IS ALSO SHOWING THE ONE FROM THE LAST ROW SINCE IT HAS THE SAME BINDING-->
<h3 class="caspCollapsible caspRight" data-bind="click:$root.setVisible">Show More</h3>
</div>
<div class="caspColSummary">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
<div data-bind="visible:$root.visible">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
</div>
</div>
<div class="caspColTeam">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
<div data-bind="visible:$root.visible">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
</div>
</div>
</div>
<!-- .caspRow -->
<div class="caspRow">
<div class="caspColEntity">
<span>Strategies</span>
<p>(<span>5</span>)</p>
<h3 class="caspCollapsible caspRight" data-bind="click:$root.setVisible">Show More</h3>
</div>
<div class="caspColSummary">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
<div data-bind="visible:$root.visible">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
</div>
</div>
<div class="caspColTeam">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
<div data-bind="visible:$root.visible">
<p>Test Data</p>
<p>Test Data</p>
<p>Test Data</p>
</div>
</div>
</div>
<!-- .caspRow -->
</div>
</div>
ビューモデル:
define(['ko', 'kopost', 'ca', 'sp/db'], function(ko, kopost, ca, db) {
function SearchViewModel(ctx, data) {
this.init(ctx, data);
}
SearchViewModel.prototype = new ca.ViewModel({});
SearchViewModel.prototype.constructor = SearchViewModel;
ko.utils.extend(SearchViewModel.prototype, (function() {
var init = function(ctx, data){
var self = this;
self.visible = ko.observable(false);
self.results = ko.observableArray();
self.subscribeToTopic("caspSearch", self.search, self);
},
setVisible = function(o,e){
this.visible(!this.visible());
$(e.target).toggleClass('caspOpen');
};
return {
init: init,
setVisible:setVisible
}
})());
return SearchViewModel;
});
明らかに、この方法で可視を設定することは問題があります。これは、可視バインディングを持つすべての列を表示しているためです。必要な列のみを表示するように柔軟にするにはどうすればよいですか?