可观察到没有提交刷新? knockoutjs(提供小提琴)

时间:2014-06-14 21:01:14

标签: knockout.js

我有一个场景,在我的提醒按钮单击的警报窗口中,我在文本框中更改日期(datepicker)时,TextBox中所选日期显示错误。

初始按钮单击,您可以在警报中看到输出,但稍后如果您更改日期,您将获得与第一个实例相同的日期。可观察的没有得到刷新

小提琴链接: : http://jsfiddle.net/JL26Z/24/

非常感谢任何解决方法

2 个答案:

答案 0 :(得分:1)

你遇到的主要问题是你没有在值变化中添加任何回调,所以没有任何方法可以更新observable - 因为它内部的值不会改变。下面是我之前在我的一个项目中使用过的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"  />

你也可以像这样添加datepicker选项:

<input type="text" data-bind="datepicker: Date, datepickerOptions: {...}"  />

这是完整的工作demo

答案 1 :(得分:0)

您正在尝试从可观察函数获取日期,而不是数组

试试这个。

它会告诉你时间

alert(self.PhoneList()[0].Date());

在这种情况下,我们从可观察数组获取数组并显示第一项Date属性