如何避免运行代码使用KO属性两次(how to avoid run code twice using

2019-10-30 07:46发布

其中,有两个日期选择器和一个表我创建一个列表页面。 页面的想法是使用默认参数为datepickers一些注册数据加载页面后,用户将能够选择他想根据日期选择过滤器,看看有什么。 要运行我的应用程序,我创建了两个属性没有fromdate和todate和我使用,以便suscribe方法,知道什么时候该日期更改,这样,当日期更改我应该叫我的服务(或者一些过滤代码)。 我与我的网页的问题是,在目前加载我的网页控制默认情况下,从我自己的逻辑seted,让自己的代码,应该叫我的服务被称为两次(一个在loadInitData等人在suscriptions)

define(["require", "exports", 'services/logger',  '../../services/Assessment/datacontext'], function(require, exports, __logger__, __datacontext__) {
var logger = __logger__;

var datacontext = __datacontext__;    
exports.title = 'AssessmentListing';   
exports.fromDate = ko.observable(new Date('2012/12/12'));
exports.toDate = ko.observable(new Date('2012/12/12'));

function activate() {
   loadInitData();
}

exports.activate = activate;
function loadInitData() { 
   var focusDate = ko.observable(new Date('2013/07/06'));
   exports.fromDate(firstDayOfMonth(focusDate));
   exports.toDate(getLastDayOfMonth(focusDate));
   // calls to services
} 

exports.toDate.subscribe(function (newValue) {
   /*THIS CODE SHOULD BE EXECUTED JUST WHEN THE USER CHANGE THE DATE FROM THE CONTROL*/
   alert("new selection :");
});
exports.fromDate.subscribe(function (newValue) {
   /*THIS CODE SHOULD BE EXECUTED JUST WHEN THE USER CHANGE THE DATE FROM THE CONTROL*/
   alert("new selection");
});

function getLastDayOfMonth(focusDate) {
  var d = new Date(Date.apply(null, focusDate));
  d.setMonth(d.getMonth() + 1);
  d.setDate(0);
  return d;
}

function firstDayOfMonth(focusDate) {
   var d = new Date(Date.apply(null, arguments));
   d.setDate(1);
   return d;
}

function viewAttached() {
}
exports.viewAttached = viewAttached;
})

尝试添加一个新的布尔属性,说在loadInitData的开头加载(真)和装载(假)和loadInitData结束。 这项工作的罚款。 但仍suscription代码被称为一个以上的时间。

Answer 1:

也许解决这个简单的方法是,直到你的视图模型被初始化延迟设置订阅:

function activate() {
   loadInitData();

    exports.toDate.subscribe(function (newValue) {
       /*THIS CODE SHOULD BE EXECUTED JUST WHEN THE USER CHANGE THE DATE FROM THE CONTROL*/
       alert("new selection :");
    });
    exports.fromDate.subscribe(function (newValue) {
       /*THIS CODE SHOULD BE EXECUTED JUST WHEN THE USER CHANGE THE DATE FROM THE CONTROL*/
       alert("new selection");
    });
}


文章来源: how to avoid run code twice using ko property