有没有办法从KendoUI重复编辑器中获取重复字符串?

时间:2014-06-30 17:54:59

标签: kendo-ui recurrence

因为我需要为我的调度设置进行自定义设置,所以我正在实现单独的Calendar,Scheduler和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

看起来我可以访问一些信息,但如果我可以从重复编辑器本身获取它,我就不想编写自己的select-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;
    }
  });
});

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

谢谢!

2 个答案:

答案 0 :(得分:3)

在计划程序的编辑事件中设置重复编辑器,它将触发更改事件,值属性是标准的iCal重复规则。

这是我的:

// 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>

答案 1 :(得分:1)

您必须从您在编辑器的事件编辑/创建者模式中描述的事件中获取它。一旦你收到活动,它只是.RecurrenceRule,如果内存服务,它只是e.event.RecurrenceRule

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