Knockout.js 提交时未刷新可观察数据?knockoutjs(提供小提琴)

Knockout.js 提交时未刷新可观察数据?knockoutjs(提供小提琴),knockout.js,Knockout.js,我有一个场景,在我的提交按钮点击时,我从文本框中选择的日期在我的警报窗口的文本框中显示错误的日期更改(日期选择器) 在初始按钮单击时,您可以在警报中看到输出,但稍后如果更改日期,您将获得与第一个实例相同的日期。observable没有刷新 小提琴链接:: 非常感谢任何解决方法您试图从可观察函数而不是数组中获取日期 试试这个 它会告诉你时间 alert(self.PhoneList()[0].Date()); 在本例中,我们从observable数组中获取数组,并显示first item Dat

我有一个场景,在我的提交按钮点击时,我从文本框中选择的日期在我的警报窗口的文本框中显示错误的日期更改(日期选择器)

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

小提琴链接:


非常感谢任何解决方法

您试图从可观察函数而不是数组中获取日期

试试这个

它会告诉你时间

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

在本例中,我们从observable数组中获取数组,并显示first item Date属性。您面临的主要问题是,您没有向值更改添加任何回调,因此knockout无法更新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"  />
<input type="text" data-bind="datepicker: Date, datepickerOptions: {...}"  />
现在的标记应该如下所示:

...
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: {...}"  />

您还可以添加如下日期选择器选项:

...
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: {...}"  />


这是全部工作。

好的,现在请尝试更改文本框中的日期,然后单击“提交”,您可以看到您得到的是旧数据,而不是新数据。我主要想摆脱它。Cheese在这里得到了这个电话列表数组中的第一个值。若你们正在谈论的是电话列表中的最后一个对象,而不是它的可观察数组,你们可以检查fiddle。我试过了,没什么用,只是不断地让我变老。我建议你试一下小提琴,再次感谢你给我展示了一些方法。我对上面的代码有一些小问题。
(function($,ko)
(jQuery,ko);
的作用是什么?您使用
注册EventHandler
是用于回调和更新observable的,就像这样
observable($(element).datepicker(“getDate”);
。谢谢这里有两个问题和两个答案:1-
(function($,ko)
(jQuery,ko);
被认为是为代码创建一个独立于其他文件中的其他javascript代码的单独作用域的良好实践-您只需将所有外部对象(jQuery和knockout)作为参数传递,这样您就不必担心某些脚本内部是否会从jQuery更改为其他脚本(并且你的脚本将停止工作)。2-
ko.utils.registerEventHandler
只是一种注册事件处理程序的“淘汰”方式,你可以在这里使用jQuery,它的工作原理应该完全相同。很好。我将检查文档以进一步掌握。谢谢你,伙计,谢谢你