ko.computed 関数からバインドされた要素にアクセスすることは可能ですか?
この疑似コードのようなもの (わかりやすくするために簡略化しています):
<h1 id="id1" data-bind="visible: myComputed">
<h1 id="id2" data-bind="visible: myComputed">
<h1 id="id3" data-bind="visible: myComputed">
...
self.myComputed = ko.computed(function(){
return <BOUND_ELEMNT>.id == 'id2';
});
2 番目の要素のみが表示されます。
注:要素ごとに個別に計算できることは承知していますが、私の場合は不可能です。
編集:
わかりました-より正確な例を挙げます。以下は私が持っているものと似ています:
<section id="id1" data-bind="visible: myComputed1">A lot of code</section>
<section id="id2" data-bind="visible: myComputed2">different lots of code</section>
<section id="id3" data-bind="visible: myComputed3">Other lots of code</section>
...
// This field's value changes over time (between 'id1', 'id2' and 'id3').
// Some complex logic changes this field,
// and as a result only one h1 is showing at a time.
self.myField = ko.observable();
self.myComputed1 = ko.computed(function(){
return self.myField() == 'id1';
});
self.myComputed2 = ko.computed(function(){
return self.myField() == 'id2';
});
self.myComputed3 = ko.computed(function(){
return self.myField() == 'id3';
});
これは DRY 原則の醜い違反であり、リファクタリングする方法を見つけたいと考えています。上記の疑似コードで解決するかもしれませんが、提案をお待ちしています...