knockoutJS、requireJS 和 jQueryUI Datepicker 不能一起玩

Posted

技术标签:

【中文标题】knockoutJS、requireJS 和 jQueryUI Datepicker 不能一起玩【英文标题】:knockoutJS, requireJS, and jQueryUI Datepicker not playing nice together 【发布时间】:2013-09-09 20:03:59 【问题描述】:

我正在尝试使用 jquery-ui Datepicker 创建一个自定义的 knockoutJS 绑定,如下所示: http://jsfiddle.net/rniemeyer/X82aC/ jQuery UI datepicker change event not caught by KnockoutJS

我在实现 requireJS 后没有运气,我尝试在本文档中的两个示例之后建模:(目前使用后者示例) http://knockoutjs.com/documentation/amd-loading.html

没有错误,但是在选择 Datepicker 后,我的可观察日期没有更新。这是一个实时 URL 示例(尝试左上角的“开始日期”输入): http://www.nealgist.com/***/reporting_0_4_3

define(['plugins/knockout','datepicker'], function(ko) 
  return function appViewModel()
    ...
    this.startDate = ko.observable(new Date());
  


define(['plugins/knockout'], function(ko) 
  ko.bindingHandlers.datePicker =  ... 

index.html:

<input type="text" data-bind="datepicker:$root.startDate" />

如果您有任何想法,我真的可以提供一些帮助,提前谢谢您!

【问题讨论】:

【参考方案1】:

我最好的猜测是在 Knockout 之前没有加载 jQuery。如果在 KO 初始加载时 jQuery 可用,则 Knockout 将使用它进行事件绑定。如果其他库使用jQuery来触发事件,而KO没有使用jQuery来绑定事件,那么handlers就不会被执行。

因此,您需要确保首先加载 jQuery。如果需要,您可以将其添加到您的配置中:

 shim: 
        'knockout': 
            deps: [ 'jquery'],
        
 

【讨论】:

感谢 Niemeyer,但是 jQuery 肯定已经加载了。我检查,仔细检查和验证,不幸的是,这不是问题。 :// 我仍然认为这是您的问题。我在您的实时站点上设置了一个断点并确认了它。正如我所提到的,您可以使用 shim 配置 (requirejs.org/docs/api.html#config-shim)。否则,您可以对绑定稍作调整以使用 jQuery 来监听事件,例如:jsfiddle.net/rniemeyer/emYGL 您的 jQuery 事件建议很有效,谢谢先生!

以上是关于knockoutJS、requireJS 和 jQueryUI Datepicker 不能一起玩的主要内容,如果未能解决你的问题,请参考以下文章

Karma + Jasmine + Durandal + KnockoutJS + RequireJS 单元测试中不匹配的匿名 define() 模块

requirejs w/ knockoutjs w/ select2 无法在首次加载时更新 observable

带有 jQ​​uery UI 可排序的 Knockoutjs

requirejs中 shim

Knockout基本绑定数据

WebApp - IOS兼容问题