【问题标题】:backbone.js change event only triggering the first once主干.js 更改事件仅触发第一次
【发布时间】:2012-10-22 15:48:07
【问题描述】:

我有一个包含日历的主干.js 模型。用户可以在日历中来回切换,我可以获取所选日历日的事件。

在我的模型中,我有

初始化:函数(){ this.on('change:date',this.get_cal()); }, get_cal:函数(){ alert('获取日历'); 这个.fetch(... }

在我看来我有

cal_date:函数(移动){ Myapp.cal.attributes.date.setDate(Myapp.cal.attributes.date.getDate()+move); }

当日期更改时,我希望主干触发更改事件,并获取新日期的日历事件。不幸的是,这并没有发生。

我也尝试将打印的日期放入模型中

Myapp.cal.set({print_date: formatted_date});

认为骨干可能缺少更新,因为我没有调用“设置”,或者因为它看到一个日期对象并认为它已经有一个日期对象,因此没有改变。

我还尝试在视图中使用Myapp.cal.trigger('change') 触发更改,但这也不起作用。调用 Myapp.cal.cal_events.refresh() 也没有删除日历事件,其中 cal_events 是保存日期事件的集合。

你知道这里有什么问题吗?

【问题讨论】:

    标签: backbone.js model event-binding


    【解决方案1】:

    我认为问题在于这一行 get_call 之后的括号:

    this.on('change:date',this.get_cal());
    

    您应该删除它们,因为它们会在初始化时直接调用 get_call,而不是使它们成为事件处理程序。

    【讨论】:

    • 这是对的,Ivan,你有没有机会解释一下,或者指出一些东西来解释调用 this.get_cal() 函数和不带括号的 this.get_cal 之间的区别?我不明白为什么一个有效,另一个无效。
    • @pedalpete 带括号(this.get_call()),get_call 将立即执行。没有括号(this.get_call),您传递的函数对象将在稍后发生适当的事件时调用
    • JavaScript 中的 @pedalpete 函数是一种数据类型,如字符串或整数。没有括号,您将函数本身作为参数传递(这是您在指定回调时通常想要做的),带括号 - 它是返回值。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多