RivetsJS:使用jQuery-ui Datepicker更新模型

时间:2015-12-16 21:19:44

标签: jquery jquery-ui jquery-ui-datepicker rivets.js

我是的新人,我喜欢它! 当其他完整的框架如AngularJS太重时,在微站点或小代码片段中非常有用。

我可以在所有情况下都能正常工作,除非输入值通过jQuery插件更改,在这种情况下是一个Datepicker。



rivets.configure({ prefix: "data-rv", templateDelimiters: ['{{', '}}'] });
var $data = {CDP:null};

rivets.bind($("#toBind"), { data: $data }); 

function Datepicker(selector, context) {
            //
            $(selector, context).datepicker().keyup(function (e) {
                if (e.keyCode == 8 || e.keyCode == 46) {
                    $.datepicker._clearDate(this);
                }
            })
        }
        
$data.CDP = {LastDeliveryDate: "01/01/2015"};

Datepicker(".date");

<link href="https://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rivets/0.8.1/rivets.bundled.min.js"></script>
<div id="toBind">
  <input type="text" class="form-control date" id="txtDeliveryDate" placeholder="dd/mm/yyyy" data-rv-value="data.CDP.LastDeliveryDate">
  <span id="showText">{{data.CDP.LastDeliveryDate}}</span>
</div>
&#13;
&#13;
&#13;

这是小提琴:https://jsfiddle.net/sLdvegdo/2/

如您所见,使用Datepicker选项更改值不会更新模型,但手动输入会更新。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

它不起作用的原因是因为rv-value活页夹通过收听input事件(旧版本中的change)来工作

您可以通过手动触发事件onSelect来解决此问题,如下所示:

rivets.configure({
  prefix: "data-rv",
  templateDelimiters: ['{{', '}}']
});
var $data = {
  CDP: null
};

rivets.bind($("#toBind"), {
  data: $data
});

function Datepicker(selector, context) {
  //
  $(selector, context).datepicker({
    onSelect: function(date) {
      $(this).trigger('input');
    }
  }).keyup(function(e) {
    if (e.keyCode == 8 || e.keyCode == 46) {
      $.datepicker._clearDate(this);
    }
  })
}

$data.CDP = {
  LastDeliveryDate: "01/01/2015"
};

Datepicker(".date");
<link href="//code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rivets/0.8.1/rivets.bundled.min.js"></script>
<div id="toBind">
  <input type="text" class="form-control date" id="txtDeliveryDate" placeholder="dd/mm/yyyy" data-rv-value="data.CDP.LastDeliveryDate">
  <span id="showText">{{data.CDP.LastDeliveryDate}}</span>
</div>

答案 1 :(得分:0)

通过手动触发输入&#39; TJ是正确的。事件,但是我在我的datepicker中使用了onChange事件并且效果很好。也许它可以帮助别人。

    $('.datepicker').datepicker({ autoclose: true, todayHighlight: true, orientation: 'bottom' })
.on('changeDate', function () { $(this).trigger('input'); });