【问题标题】:Is there a way to get the recurrence string from a KendoUI Recurrence Editor?有没有办法从 KendoUI 循环编辑器中获取循环字符串?
【发布时间】:2014-08-21 04:12:14
【问题描述】:

因为我的日程安排设置需要自定义设置,所以我正在实施单独的日历、日程安排程序和 RecurrenceEditor 小部件。到目前为止,一切正常,但我无法从 RecurrenceEditor 小部件中获取已解析的字符串。我在 API 文档中没有看到将规则作为字符串提取的方法(RecurrenceEditor 小部件也没有真正记录在那里)。

这就是我设置recurrenceEditor的方式:

$(document).ready(function()
{
  $("#recurrence-editor").kendoRecurrenceEditor({
    start: new Date(),
    change: function(e)
    {
      var editor = e.sender;

      // I want to get the recurrence rule string here.
    }
  });
});

我在 Firebug 中没有看到任何提示我可能尝试的方法或属性的内容。到目前为止,我已经尝试过:

editor.ruleValue
editor.recurrenceRule

看起来我可以访问一些信息,但我不想编写自己的 selections-to-parseable-string 方法,如果我可以从循环编辑器本身获取它。

更新:当我这样设置时:

$(document).ready(function()
{
  $("#recurrence-editor").kendoRecurrenceEditor({
    start: new Date(),
    edit: function(e)
    {
      var editor = e.sender;
      var recurrenceString = editor.RecurrenceRule;

      return recurrenceString;
    }
  });
});

edit 事件永远不会触发。可能是因为我没有将循环编辑器实现为调度程序小部件的一部分,而是作为页面上的独立小部件。

谢谢!

【问题讨论】:

    标签: kendo-ui recurrence


    【解决方案1】:

    您必须从您在编辑器的事件编辑/创建者模式中描述的事件中获取它。一旦你得到事件,它只是.RecurrenceRule,如果没记错的话,它只是e.event.RecurrenceRule

    有趣的是,该字符串中使用的标准是RFC 5545 3.3.10

    【讨论】:

    • 感谢您的回复,但事件和 RecurrenceRule 在发送到更改事件处理程序的 Javascript 事件信息中均未定义。
    • 您能否在编辑事件中尝试该代码以查看它是否有效,如果您在更改事件中需要它,我们将向后工作?
    • 编辑了我上面的原始问题(cmets 太短了)。简而言之,编辑事件不会随着我如何实现 RecurrenceEditor 小部件而触发。
    【解决方案2】:

    在Scheduler的edit事件中设置recurrence editor,它会触发change事件,value属性是标准的iCal Recurrence Rule。

    这是我的:

    // Setup Recurrence Editor
    // Telerik support recommends this method over the common inline script
    // because it allows us to choose which recurrence editor.  However, it does
    // break the MVVM two-way bindings, so the current value MUST be explicitly set
    // on creation, and the change event must be handled.
    var event = e.event,
        container = e.container,
        recurrenceEditor = container.find("#recurrenceEditor");
    
    if (kendo.support.mobileOS === false) {
        recurrenceEditor.kendoRecurrenceEditor({
            start: new Date(e.event.start),
            value: e.event.recurrenceRule,
            timezone: self.scheduleConfig.timezone,
            messages: self.scheduleConfig.messages.recurrenceEditor,
            change: function (ev) {
                event.set("recurrenceRule", this.value());
            }
        });
    } else {
        // The Mobile Recurrence Editor requires the parent kendo pane
        // be passed as a parameter, otherwise it will crash when the
        // user attempts to alter the frequency
    
        var pane = container.parent(".km-pane").data("kendoMobilePane");
    
        recurrenceEditor.kendoMobileRecurrenceEditor({
            start: new Date(e.event.start),
            value: e.event.recurrenceRule,
            timezone: self.scheduleConfig.timezone,
            messages: self.scheduleConfig.messages.recurrenceEditor,
            pane: pane,
            change: function(ev) {
                event.set("recurrenceRule", this.value());
            }
        });
    }
    

    还有 HTML(在自定义编辑器模板内)

     <div class="lineEntry" data-bind="invisible: recurrenceId">
        <div id="recurrenceEditor" name="recurrenceRule" data-bind="value: recurrenceRule" class="toInlineBlock">
        </div>
     </div>
    

    【讨论】:

      猜你喜欢
      • 2013-12-28
      • 2021-08-24
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2020-12-17
      • 2023-03-04
      相关资源
      最近更新 更多