0

我有一个简单的应用程序,它显示了一组“活动”并且它可以工作,但我想我会开始使用一些 Ember View(这对我来说是一个学习实验)而不是我正在使用的当前控制器模板模型现在。

在显示活动时,有标准视图、详细视图和隐藏/显示详细信息的拨动开关。我认为也许视图可以处理切换开关和隐藏/显示方面。可悲的是,这导致我的问题......

看起来视图可以捕获“点击”和其他事件,但我希望它捕获我的活动模板的 {{action}} 语句,并且动作事件似乎跳过视图并开始在控制器中查找处理函数(然后路由器)。是对的吗?

为了整理我的问题,活动模板就像这样简单:

{{#each controller}}
    {{view App.ActivityView}}
{{/each}}

ActivityView 指向一个用于大部分工作的模板,但也包含操作处理程序toggleDetails(以及click只是为了测试目的而插入的):

App = require("app");

module.exports = App.ActivityView = Ember.View.extend({

    templateName: 'activity',
    isDetailHidden: true,

    click: function(evt) {
        // just added for debugging purposes ... this does get executed
        console.log("ActivityView clicked");
    },

    toggleDetails: function(target) {
        console.log("ActivityView pressed " + target);
        this.set('isDetailHidden', !this.get('isDetailHidden')); // toggle state
        target = "#activity-details-" + target;
        if (this.get('isDetailHidden')) {
            jQuery( target ).slideDown( "fast" );
        } else {
            jQuery( target ).slideUp( "fast" );
        }
    }

});

切换开关在Activity 模板中定义为:

 <a href="#" class="arrow"><div class="icon" {{action toggleDetails id}}></div></a>

值得指出的是,每个 Activity 都有一个带有以下语句的 DOM id(用于使用 jQuery 动画定位特定的 Activity):

<ul class="activities " id="activity-{{unbound id}}">

无论如何,如前所述,{{action}} 会跳过视图并在控制器和路由器中查找处理程序。然后它——之后——调用视图的“click”方法,我只是为了调试目的而放入的。

我是一个新手 Ember,所以您可能能够提供的任何手握将不胜感激。

4

1 回答 1

0

我认为你应该设定行动的目标:

{{action toggleDetails this target=view}}

(我还添加了“this”来传递范围)

于 2013-07-30T07:57:25.930 回答