首页 > 解决方案 > 如何暂停和取消暂停属性以便在 knockout.js 中按预期工作

问题描述

我有一个函数setServiceId(serviceId),通过单击某个按钮并传递该服务的 id 来调用该函数。

我也有serviceIdSubscrier = vm.selectedServiceId.supsendableSubscribe(changeServiceId)监听 serviceId 的每一个变化(例如,如果我点击 id = 5151,然后点击 5152,这个事件将被触发并调用一个函数changeServiceId)但是,现在,当我点击多次相同的服务时,我想要也被触发,因为它会在 id 不同时触发(例如,我单击服务 id=5151,然后再次单击 id=5151)并且我希望具有与单击不同 id 相同的行为

这是我的全部功能:

function setServiceId(serviceId) {
    vm.selectedServiceId(serviceId);
    jQuery.post(rootUrl + 'spaemployeeadmin/GetFirstSearchFilterDateForParent', {
        locationId: vm.selectedLocationId()
    })
        .done(function (data) {
            var dateObj = { day: data.Day, month: data.Month, year: data.Year };
            vm.refreshData(dateObj, null);
        });
}

serviceIdSubscrier = vm.selectedServiceId.supsendableSubscribe(changeServiceId)

function changeServiceId() {
    var currentService = getService();
    if (vm.combineSchedules()) {
        vm.selectedService(currentService || {});
        refreshAllowedTimes().then(function () {
            setTimeByPreviousSelection();
            checkToPushCriteria();
        });
    } else {
        refreshOnServiceType();
    }
}

标签: javascriptknockout.jsbinding

解决方案


如果 serviceId 是一个对象,您可以将其更改为具有相同值的另一个对象,并且将注册更改。

5 === 5 //True
{id: 5} === {id: 5} //False

推荐阅读