【问题标题】:Kendo TimePicker MVVM binding to OData ResultKendo TimePicker MVVM 绑定到 OData 结果
【发布时间】:2016-05-03 07:15:57
【问题描述】:

我有一个来自 odata 端点的模型,我绑定到一个表单,唯一不会玩球的控件是时间选择器...

这里是初始化代码:

my.api.get("odata url", function (res) {
   var model = new kendo.observable(res);
   var component = $("#editor");
   kendo.bind(component, model);
   $("#editor").data("model", model);
});

以下是表单中有效的日期选择器字段标记的示例:

<li class="Field">
            <label for=""> End</label>
            <div class="value">
<span class="k-widget k-datepicker k-header k-input"><span class="k-picker-wrap k-state-default"><input class="k-input" data-bind="value: End" data-format="dd MMM yyyy" data-role="datepicker" data-val="true" data-val-required="The End field is required." id="End" name="End" type="text" value="2020-11-17" style="width: 100%;" role="combobox" aria-expanded="false" aria-owns="End_dateview" aria-disabled="false" aria-readonly="false"><span unselectable="on" class="k-select" role="button" aria-controls="End_dateview"><span unselectable="on" class="k-icon k-i-calendar">select</span></span></span></span>
<span class="field-validation-valid" data-valmsg-for="End" data-valmsg-replace="true"></span>
            </div>
        </li>

这是我的时间选择器字段之一:

<li class="Field">
            <label for="Default_Calculation_Time">Default Calculation Time</label>
            <div class="value">

<span class="k-widget k-timepicker k-header k-input"><span class="k-picker-wrap k-state-default"><input class="k-input" data-bind="value: AutoCalculationTime" data-format="hh:mm tt" data-role="timepicker" data-val="true" data-val-required="The Default Calculation Time field is required." id="AutoCalculationTime" name="AutoCalculationTime" type="text" value="02:30 PM" role="combobox" aria-expanded="false" aria-owns="AutoCalculationTime_timeview" aria-disabled="false" aria-readonly="false" style="width: 100%;"><span unselectable="on" class="k-select" role="button" aria-controls="AutoCalculationTime_timeview"><span unselectable="on" class="k-icon k-i-clock">select</span></span></span></span>
<span class="field-validation-valid" data-valmsg-for="AutoCalculationTime" data-valmsg-replace="true"></span>

            </div>
        </li>

以上两个字段都从 OData 端点绑定到 UTC 格式的 DateTimeOffsets。

这是我的表单绑定到的模型对象的示例(上面的js代码中的模型):

{
  @odata.context: "https://apitest.corporatelinx.com/ACOFI/$metadata#Programme/$entity"
  AutoCalculationTime: "2000-01-01T14:30:00Z"
  AutoCutoffTime: "2000-01-01T14:00:00Z"
  Description: "ACOFI DEMO Buyer Programme"
  End: "2020-11-17T18:22:46.953Z"
  FundCount: 3
  Id: 3
  Name: "ACOFI Demo Programme"
  Start: "2015-11-17T18:22:46.953Z"
  _events: Object
  uid: "28dd1327-ed4a-4b24-9418-8b86d143acd7"
  __proto__: i
}

所以我的问题是......需要执行什么黑魔法才能让 Kendo TimePicker 控件的行为与其他所有控件一样并正常工作?

【问题讨论】:

    标签: javascript mvvm kendo-ui odata kendo-timepicker


    【解决方案1】:

    好吧,我想通了……

    原来剑道时间选择器不能绑定到 UTC datetimeoffset 字符串,但是如果我在绑定之前将它们解析为 javascript 日期对象,那么像普通剑道一样绑定可以解决这个问题。

    对我来说有一种不好的代码味道...... IMO 我认为 Telerik 至少应该自动处理 UTC 通用字符串以及日期对象,但它不是世界末日,只是意味着我必须“预处理”将模型数据提供给剑道之前。

    是的,剑道生活的另一天!

    【讨论】:

    • 这可能有点跑题了,但我一直在我的项目中使用 Kendo 日期选择器,而且我最近发现 Kendo 附带了内置的日期解析器和格式化程序。让我不必再获得另一个开源日期管理库。 docs.telerik.com/kendo-ui/framework/globalization/dateparsing & docs.telerik.com/kendo-ui/framework/globalization/…
    • 我只使用 JS Date.parse(dateString) 函数,在正确格式化 UTC 日期的情况下工作得很好。我想我在答案中的观点是,剑道应该只在给定一个我想绑定到选择器/要使用的元素值属性中的值的字符串的情况下执行此表单。 IMO 这是剑道框架中的一个错误。
    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多