2013-07-30 38 views
0

我有一个简单的应用程序,它显示一组“活动”,它的工作原理,但我想我会开始使用一些Ember视图(这是我的学习实验),而不是当前的控制器我正在使用的模板模型。处理控制器和视图之间的事件

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

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

编纂我的问题,活动模板是如此简单:

{{#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"); 
     } 
    } 

}); 

肘节开关在活动模板定义为:

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

,这是值得指出的是,每一个活动都给出下面的语句的DOM ID(用来针对与jQuery的动画比活度):

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

在任何情况下,{ {action}}如前所述,跳过视图,而是在控制器和路由器中查找处理程序。然后 - 然后 - 调用我为了调试目的而放入的View的“click”方法。

我有点新手伊贝尔,所以任何手持你可能能够提供将不胜感激。

回答

0

我想你应该设置的操作目标:

{{action toggleDetails this target=view}} 

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

+0

顺便说一句,如果我移动到另一条路线,然后返回,是这些意见重新初始化还是保持其状态? – ken

+0

他们被重新初始化,但他们的状态可以通过模型和控制器进行管理......尝试这个[小提琴](http://jsfiddle.net/amindunited/g4HW6/)...只需在页面,你会看到页面浏览计数是独立管理的。 –

相关问题