ここでは私が作業しているコードです。コンソールログには、onFilterChangeメソッドが2回呼び出されていることが表示されています(「selectタグ」内の各関数定義に対して1回)。データバインドで「イベント:{change:onFilterChange}」を変更する必要があります過去に私のために働いているので、何の使用「()=> onFilterChange」私はKnockout.jsに慣れていないよん、と私たちはES6をサポートしていません。ページの読み込み時にKnockout.js関数が実行されないようにするにはどうすればよいですか?
function ProductionsView() {
var self = this;
self.showDateFilter = ko.observable(true);
self.showCategoryFilter = ko.observable(true);
self.showDateFilter = ko.observable(true);
self.onFilterChange = function(data,event) {
if (self.init()) {
self.doFilter();
console.log("onFilterChange was called. This is happening twice on page load before interacting with the filter. ");
}
};
self.doFilter = function() {
var df = self.selectedDateFilter();
var cf = self.selectedCatFilter();
if (typeof cf == 'undefined' || typeof df == 'undefined') {
return;
}
// these are all defined as observables too, but not important since it's the "onFilterChange" that I don't want to call
self.amFiltering("All" !== df || "All" !== cf);
self.allCatAndDate("All" === df && "All" === cf);
self.offset(0);
self.doAjaxSearchFiltered(true);
};
}
var pv = new ProductionsView();
ko.applyBindings(pv);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="visible: showDateFilterBar()">
<select data-bind="
value: selectedCatFilter,
event: { change: onFilterChange },
visible: showCategoryFilter()
">
<option value="all">all</option>
<option value="cat1">cat1</option>
</select>
<select data-bind="
value: selectedDateFilter,
event: { change: onFilterChange },
visible: showDateFilter()
">
<option value="all">all</option>
<option value="date1">date1</option>
</select>
</div>
selectedCatFilterおよびselectedDateFilter、observableまたはcomputedとは何ですか?それらのコードを表示できますか? –
ページの読み込み時に実行したくない場合は、いつ実行しますか?そのイベントが発生するまで 'applyBindings()'を呼び出すのを待って、そのイベントを使って呼び出しをトリガすることができますか? – coralvanda
@JasonSpake申し訳ありませんが、私はその観察可能な宣言を.に追加しました。@coralvは、 'applyBindings()'を使用するためのこの良い文書です:http://stackoverflow.com/questions/18990244/whats-the-applybindings-second-parameter-used -for どのフィルタを選択するかを選択するときに、メソッドを 'onchange'と呼ぶのが好きです。 'applyBindings(self、document.getElementById(" date-results "))'を追加しますか? –