【发布时间】:2014-09-01 14:35:13
【问题描述】:
我有一个场景,我从 TextBox 中选择的日期在我的提交按钮单击的警报窗口中的文本框中的日期更改(日期选择器)显示错误。
在初始按钮单击时,您可以在警报中看到输出,但稍后如果您更改日期,您将获得与第一个实例相同的日期。 observable 没有被刷新
小提琴链接: : http://jsfiddle.net/JL26Z/24/
非常感谢任何解决方法
【问题讨论】:
标签: knockout.js
我有一个场景,我从 TextBox 中选择的日期在我的提交按钮单击的警报窗口中的文本框中的日期更改(日期选择器)显示错误。
在初始按钮单击时,您可以在警报中看到输出,但稍后如果您更改日期,您将获得与第一个实例相同的日期。 observable 没有被刷新
小提琴链接: : http://jsfiddle.net/JL26Z/24/
非常感谢任何解决方法
【问题讨论】:
标签: knockout.js
您遇到的主要问题是您没有为值更改添加任何回调,因此淘汰赛无法更新可观察对象 - 因为其中的值不会更改。下面是我前一段时间在我的一个项目中使用的datepicker 绑定处理程序。它很小而且很简单,但应该能胜任:
(function ($, ko) {
ko.bindingHandlers.datepicker = {
init: function (element, valueAccessor, allBindingsAccessor) {
// initialize datePicker with options (not required)
var options = allBindingsAccessor().datepickerOptions || {};
$(element).datepicker(options);
// change date handler
ko.utils.registerEventHandler(element, "change", function () {
var observable = valueAccessor();
observable($(element).datepicker("getDate"));
});
},
update: function (element, valueAccessor) {
// update date value
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).datepicker("setDate", value);
}
}
})(jQuery, ko);
重要提示:它适用于日期,而不是字符串。因此,在您的视图模型中,您应该使用日期,如下所示:
...
self.Date = ko.observable(new Date('2014-06-03T00:00:00'));//before formatting
...
标记现在应该是这样的:
<input type="text" data-bind="datepicker: Date" />
您也可以像这样添加日期选择器选项:
<input type="text" data-bind="datepicker: Date, datepickerOptions: {...}" />
这里是完整的工作demo。
【讨论】:
(function ($, ko) 和 (jQuery, ko); 的作用是什么?您使用 registerEventHandler 是用于回调和更新 observable 的 observable($(element).datepicker("getDate")); 。谢谢
(function ($, ko) 和 (jQuery, ko); 被认为是为您的代码创建单独范围的好习惯,独立于您在其他中拥有的其他 JavaScript 代码文件 - 您只需将所有外部对象(jQuery 和敲除)作为参数传递,因此您不必担心内部某些脚本是否会将 $ 从 jQuery 更改为其他对象(并且您的脚本将停止工作)。 2 - ko.utils.registerEventHandler 只是一种注册事件处理程序的“淘汰”方式,你可以在这里使用 jQuery,它应该完全一样。
您正在尝试从可观察函数获取日期,而不是数组
试试这个。
它会显示时间
alert(self.PhoneList()[0].Date());
在这种情况下,我们从 observable 数组中获取数组并显示第一项 Date 属性
【讨论】: