如何避免运行代码两次使用ko属性
how to avoid run code twice using ko property
我正在创建一个列表页面,其中有两个日期选择器和一个表。页面的想法是使用日期拾取器的默认参数加载一些注册数据的页面,之后用户将能够根据日期拾取器过滤器选择他想要看到的内容。为了运行我的应用程序,我创建了两个属性fromDate和toDate,我使用订阅方法来知道日期何时更改,以便在日期更改时调用我的服务(或一些过滤代码)。我的问题与我的页面是,此刻加载我的页面的控制默认设置从我自己的逻辑,所以我的代码,应该调用我的服务被调用两次(一个在loadInitData和其他在订阅)
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的结束处说loading(true)和loading(false)。这项工作很好。但是订阅代码仍然被调用了不止一次
解决这个问题的一个简单方法可能是延迟设置订阅,直到您的视图模型初始化:
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");
});
}
相关文章:
- Meteor Router数据函数被调用两次
- 从MySQL数据库中获取输入数据需要两次页面刷新
- Module.start()已激发两次
- Jquery点击事件必须点击两次
- Append元素在运行两次函数后不显示
- 防止双击执行两次jQuery post请求
- 我必须点击两次才能激活任何按钮操作(离子/角度)
- 单击jQuery会激发两次
- 如何避免在树上走两次
- button.单击两次删除附加操作后不工作
- 由于$compile,Javascript(Angular)嵌套指令加载了两次
- 单击元素两次后执行操作
- AngularJs正在阻止链接被点击两次
- 为什么我的路线处理程序会触发两次
- 为什么Highchart在我的rails应用程序中加载了两次?(未捕获的Highcharts错误#16)
- 在列表中至少使用两次随机生成的nr
- 检查某个键是否按下两次
- Ko.计算函数更新两次
- 如何避免运行代码两次使用ko属性
- Ko.js在一个页面中两次