2013-06-18 74 views
1

在我的項目中使用時間datepicker我看不到我的錯誤在哪裏。 基本上我想做的是做一個suscription來源屬性,以便知道何時屬性更改(加載到服務方法的時間)。所以follwoing一些網址,我是能夠建立這個簡單的例子:時刻datapicker:對KO屬性的描述

var model = { 
test_date: ko.observable(new Date('2012/12/12'))   
}; 

ko.applyBindings(model, $("#target")[0]); 

model.test_date.subscribe(function (newValue) {  

alert("new selection :" + newValue); 
}); 

http://jsfiddle.net/rolandomartinezg/x7Zt3/5/

上面的代碼是簡單的作品,我的麻煩開始在我的生產代碼,其中一些奇怪的原因代碼realted到suscription沒有被解僱。 簡單的例子(產品代碼中我打字稿):

export var fromDate = ko.observable(new Date('2012/12/12')); 
fromDate.subscribe(function (newValue) { 
alert("new selection of date"); 
}); 

我試圖找到我的jsfiddle例如缺少一些參考和我的生產代碼,並都使用相同的庫(moment.js,矩datepicker.js ,那一刻,日期選擇器,ko.js,/ knockout.js 什麼我做錯任何提示

更新1:??從打字稿轉換爲JS我的產品代碼:

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 = ko.observable(firstDayOfMonth(focusDate)); 
    exports.toDate = ko.observable(getLastDayOfMonth(focusDate)); 
    // calls to services 
} 

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; 
} 
exports.toDate.subscribe(function (newValue) { 
    alert("new selection :"); 
}); 

exports.fromDate.subscribe(function (newValue) { 
    alert("new selection"); 
}); 
function viewAttached() { 
} 
exports.viewAttached = viewAttached; 
}) 

更新2:我的觀點

<div class="span4"> 
      <span><small>From Date:</small> </span> 
      <div class="input-append date" id="fromDate" > 
       <input id="fromDatePicker" type="text" data-bind="datepicker: fromDate()" class="input-small"> 
       <span class="add-on"><i class="icon-calendar"></i></span> 
      </div> 
      <span><small>To Date: </small></span> 
      <div class="input-append date" id="ToDate" > 
       <input id="toDatePicker" type="text" data-bind="datepicker: toDate()" class="input-small"> 
       <span class="add-on"><i class="icon-calendar"></i></span> 
      </div> 
     </div> 

更新3 嘗試使用CHANGEDATE不起作用,因爲ev.date不可用。

export function viewAttached() { 

$('#fromDatePicker').datepicker() 
.on('changeDate', function (ev) { 
    /*ev.date doesn't work*/ 
    alert('fromdate has changed');  
}); 

} 

回答

3

在數據綁定,您可以:

datepicker: toDate() 

由於toDate是可觀察到的,打電話toDate()讓你的值的可觀察的,所以你傳遞一個而不是傳遞可觀察到的。

試着改變你的綁定:

datepicker: toDate 

這將使datepicker裝訂處理程序來更新您觀察到的。

更新

我覺得這是你的第二個問題。在這個函數:

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

...你與哪些不具備的新訂閱觀測更換toDatefromDate特性應用於原始觀測做。嘗試在創建這些觀察值後附加訂閱,或者可能不是創建新的觀察值,只需填充它們:

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

是的,您的提示很有用。我在我的例子中測試過應該是這個原因,可悲的是後來改變我的觀點,問題仍然存在。 – Rolando

+0

看起來'fromDate'需要同樣的待遇。如果這仍然不能解決生產問題,你還應該發佈你的生產代碼如何調用'ko.applyBindings';目前還不清楚你的JS如何與你的觀點聯繫在一起。 – Jacob

+0

我的網絡應用程序基於hottowel模板(此模板使用durandal.js)。我怎麼能給你更多的反饋? – Rolando