2013-06-18 2 views
1

Работа с моментом datepicker в моем проекте, я не вижу, где моя ошибка. В основном, что я хочу сделать, это заставить подозревать свойство source, чтобы узнать, когда изменится свойство th (время загрузки на сервисный метод). Так follwoing некоторые URLs я был в состоянии построить этот базовый пример:момент 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 , момент-DatePicker-ko.js,/knockout.js то, что я делаю неправильно любого кончик

UPDATE 1:.? Мой код продукции преобразуется из машинописи в ЯША:

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; 
}) 

UPDATE 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> 

Update 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 связывания обработчика обновлять наблюдаемым.

Update:

Я думаю, что это ваша вторая проблема. В этой функции:

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 
} 
+0

Да, ваш отзыв полезен. я тестировал в своем примере на скрипке, что должно быть причиной, к сожалению, после того, как я изменил свое мнение, проблема все еще существует. – Rolando

+0

Похоже, что 'fromDate' нуждается в таком же лечении.Если это еще не устраняет проблему с производством, вы также должны указать, как ваш производственный код вызывает 'ko.applyBindings'; пока неясно, как ваш JS связан с вашим мнением. – Jacob

+0

Мое веб-приложение основано на шаблоне hottowel (этот шаблон использует durandal.js). как я могу дать вам больше отзывов? – Rolando

Смежные вопросы