1

私のプロジェクトで瞬間の日付ピッカーを使用すると、エラーがどこにあるのかわかりません。基本的に私がやりたいことは、プロパティがいつ変更されるかを知るためにソースプロパティにサブスクリプションを作成することです(サービスメソッドにロードする時間)。したがって、いくつかの URL に従って、この基本的な例を作成できました。

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/

上記のコードはシンプルで機能します。私の問題は、何らかの奇妙な理由でサブスクリプションに関連付けられたコードが起動されない本番コードから始まります。短い例 (実稼働コードでは、私は typescript です):

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

jsfiddle の例と本番コードから欠落している参照を見つけようとしましたが、どちらも同じライブラリ (moment.js、moment-datepicker.js、moment-datepicker-ko.js、/knockout.js) を使用しています。 ? 何かヒントはありますか?

更新 1 : typescript から 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 ev.date が利用できないため、changeDate を使用しようとしても機能しません。

export function viewAttached() {

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

}
4

1 に答える 1

3

データ バインディングには、次のものがあります。

datepicker: toDate()

はオブザーバブルであるためtoDate、呼び出すとオブザーバブルのtoDate()が取得されるため、オブザーバブル自体を渡す代わりにそれを渡します。

バインディングを次のように変更してみてください。

datepicker: toDate

これにより、datepickerバインディング ハンドラーがオブザーバブルを更新できるようになります。

更新

これはあなたの2番目の問題だと思います。この関数では:

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
}

...toDateおよびfromDateプロパティを、元のオブザーバブルに適用されているサブスクリプションが適用されていない新しいオブザーバブルに置き換えています。これらのオブザーバブルを作成した後にサブスクリプションをアタッチするか、新しいオブザーバブルを作成する代わりに、それらを入力してみてください。

function loadInitData() {
    var focusDate = ko.observable(new Date('2013/07/06'));
    exports.fromDate(firstDayOfMonth(focusDate));
    exports.toDate(getLastDayOfMonth(focusDate));
    // calls to services
}
于 2013-06-18T17:36:57.417 に答える