3

フォームでbootstrap-daterangepickerを使用しています。私が現在この選択の値を取得している方法は機能しますが、値を取得している方法は良い方法ではないようです。

セッションを使用してフィールドの選択を保持し、完了したらそれらの設定を解除するのは悪いようです。何かを見逃していないことを確認したいだけです。

入力フィールドから値を取得することはできますが、日付を引き出​​すために文字列を解析する必要があります。daterangepickerの日付形式を変更した場合、解析を変更する必要があるため、これを行うとメンテナンスの問題になる可能性があります。

フォームフィールド:

    <input type="text" name="carpool_eventDates" id="carpool_eventDates" />

コンポーネントをアクティブ化するJS:

    Template.add_event.rendered = function () {
      // initialize add event modal;
      $('#addEvent')
       .modal();
      // initialize the date range picker
      $('input[name="carpool_eventDates"]').daterangepicker(
        // default date range options
        {ranges: {'Last 5 Days': [Date.today().add({ days: -4 }), 'today'],
              'Next 5 Days': ['today', Date.today().add({ days: 4 })]}
        },
        // grab the selection
        function(start, end) {
          Session.set("showAddEventDialogue_dateRangeStart",start);
          Session.set("showAddEventDialogue_dateRangeEnd",end);
        });
      };

JS保存ボタンクリックハンドラー:

    Template.add_event.events({
        'click button.save-addEventDialogue': function(e, tmpl) {

          // Get the date range selection from the session
          var start = Session.get("showAddEventDialogue_dateRangeStart");
          var end = Session.get("showAddEventDialogue_dateRangeEnd");

          // Do something with the dates

          // Clear the dates from the session now that we are done with them
          Session.set("showAddEventDialogue_dateRangeStart","");
          Session.set("showAddEventDialogue_dateRangeEnd","");

          // Close the dialogue
          Session.set("showAddEventDialogue", false);
        }             
      });

これはこれを行うための良い方法ですか?それとももっと良い方法はありますか?

ありがとう。

4

1 に答える 1

4

jQueryの.data()<input>を使用して、Sessionではなく、元の要素にdaterangepickerデータを格納できます。したがって、「選択を取得」コードを次のように書き直すことができます。

// grab the selection
function(start, end) {
  $('input[name="carpool_eventDates"]')
    .data("showAddEventDialogue_dateRangeStart", start)
    .data("showAddEventDialogue_dateRangeEnd", end);
});

次に、Sessionからではなく、要素からデータを取得します。

// Get the date range selection from the element
var start = $('input[name="carpool_eventDates"]').data("showAddEventDialogue_dateRangeStart");
var end = $('input[name="carpool_eventDates"]').data("showAddEventDialogue_dateRangeEnd");

<input>また、モーダルが閉じられてテンプレートが破棄されたときにが破棄されると仮定すると、クリーンアップするセッションやその他の変数はありません。

于 2013-02-10T22:38:45.313 に答える