小编mic*_*ldd的帖子

淘汰赛更改事件处理程序

我花了好几个小时试图让我的durandal/knockout应用程序中的一个简单的事件调用正常工作.

上下文

我有一个用户可以从选择框中选择的语言列表:

    <select class="form-control select2"
        data-bind="event: { change: app.languageChanged }, options:languages,
        optionsText:'label',
        optionsValue:'code',
        value:app.selectedLanguage"></select>
Run Code Online (Sandbox Code Playgroud)

app.selectedLanguage属性是一个ko.observable.我知道这是有效的,因为正确的项目被预选.

    this.selectedLanguage = ko.observable(options.defaultLanguage);
Run Code Online (Sandbox Code Playgroud)

我还有一个事件处理程序,它监听该选择框上的更改,以便我可以向应用程序的其他需要通知的部分发送消息:

    languageChanged : function(data, event) {
        console.log(data);
        console.log(event);
        console.log(this.selectedLanguage());

        app.trigger('language:change', this.selectedLanguage());
    },
Run Code Online (Sandbox Code Playgroud)

问题

  1. 第一个参数'data'不包含所选项,而是包含所有项(实际上,它似乎是完整的当前视图模型).
  2. 如果1.不起作用,那么它至少可以从可观察的"selectedLanguage"中获取新值.不幸的是,似乎总是有旧的价值.所以每当我更改selectbox选项时,我总是得到之前选择的值.

所以问题是:我能做错什么?我相信这通常是正常的,我必须在某处遗漏某些东西.

我以为我终于明白淘汰赛是如何运作的,但现在我遇到了下一个问题.如果有人可以帮助我,我将非常感激.

编辑[求助]

感谢xdumaine,这是(好的和简单的)解决方案:

在我的html模板中,我删除了更改事件:

    <select class="form-control select2"
        data-bind="options:languages,
        optionsText:'label',
        optionsValue:'code',
        value:app.selectedLanguage"></select>
Run Code Online (Sandbox Code Playgroud)

在我的App视图模型中(我需要随处可见),我现在订阅了ko.observable而不是监听事件处理程序:

    define([ 'durandal/app', 'underscore', 'knockout', 'myapp/myapp' ], function(app, _, ko, myapp) {

        "use strict";

        function App(options) {

            if (!(this instanceof App)) {
                throw new TypeError("App constructor cannot be called as a …
Run Code Online (Sandbox Code Playgroud)

javascript knockout.js durandal

12
推荐指数
1
解决办法
2万
查看次数

重新启动quartz调度程序而不会出现错误

上下文

我正在尝试使用jdbc在集群模式下使用quartz调度程序.

问题

在我开始使用集群模式的jdbc之前,我刚刚通过RAM存储测试了调度程序.这没有问题,我能够重启调度程序(主类),没有任何错误.我现在的问题是,当我停止执行(ctrl + c)然后重新启动它时,我总是收到错误消息:

org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'MyTestJob', because one already exists with this identification.
Run Code Online (Sandbox Code Playgroud)

我不明白这里发生了什么.quartz不支持重新启动调度程序吗?我的意思是,如果发生崩溃并且调度程序在恢复后重新启动会发生什么?那么从石英数据库中删除作业的唯一选择是什么?也许还有另外一种我错过的方法或东西.使用不能应对重启的库感觉不太舒服.

另一个奇怪的事情是,当更改为jdbc时,我的工作不再被触发,我只看到DB中的状态WAITING.这可能是什么?作业(cron-schedule)在RAM模式下没有问题.

我对文档的水平和我遇到的这个简单任务遇到的问题感到有些惊讶,因为我已经听说了石英调度程序多年,但从未使用它.古德尔建议我不是唯一有这个问题的人.我希望这只是我和我的问题有一个简单的解决方案,否则在2.2.x版本中第一次尝试这个库并且已经不得不寻找其他东西会非常令人失望.

这是我的配置:

#============================================================================
# Configure Main Scheduler Properties  
#============================================================================

org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = Test-Scheduler
org.quartz.scheduler.instanceId = AUTO

#============================================================================
# Configure ThreadPool  
#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 25
org.quartz.threadPool.threadPriority = 5

#============================================================================
# Configure JobStore  
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = true
org.quartz.jobStore.dataSource = quartzDS
org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = true …
Run Code Online (Sandbox Code Playgroud)

java quartz-scheduler

4
推荐指数
1
解决办法
2万
查看次数