javascript - 如何将 Action 从 Ember 组件发送到包装它的 View ?

标签 javascript model-view-controller ember.js

我知道 sendAction 会将 Action 从组件发送到与放置它的模板关联的 Controller ,但在我的例子中,组件没有直接放置在路由模板内。相反,我的组件位于 View 的模板中:

<script type="text/x-handlebars" data-template-name="displayTemplate">
    <h3>View</h3>

    ...

    {{componentA}}

</script>

这个组件有一个关联的 Controller :

App.ComponentAController = Ember.Controller.extend({
    ...
}

但是环绕 View 没有,它只是一个 View :

App.DisplayView = Ember.View.extend({
    templateName: 'displayTemplate',

    actions: {
         updateData: function(data) {
             /* how can I get this triggered when an action happens in the embedded componentA? I'd like to 
             process the data object here so I can update the wrapping view accordingly. */
         }
    }
...
}

如果我在组件的 Controller 中实现操作,当我从组件中执行 sendAction('updateData', data) 时,它不会被触发。如果我在 DisplayView 中实现它,它也不会被触发。

那么问题来了:当在componentA中触发了一个action,我如何将该action发送到 View DisplayView进行处理?

更具体地说,我正在尝试将上下文数据发送到该 View ,以便它可以根据在嵌入式组件上选择的内容进行更新。因此,如果有另一种方式来传达这些数据,那也行得通。我选择行动只是因为它看起来合适,但也许不合适。

更新:实际场景

实际代码引用了一个 GridView ,在它的模板中有一个分页组件。当用户切换到新页面时,分页组件向服务器发送所选页面的请求。

一旦返回数据,它就需要让包装 View (包含网格)知道新数据可用。当用户单击页码时,操作在分页组件中处理,这就是我从那里进行数据调用的原因。如果我需要对其他内容进行分页,我想重用这个组件,所以我不想让分页成为 GridView 的一部分。

最佳答案

通常你传递target,但是组件的上下文属性名称是targetObject

{{foo-bar action='actionName' targetObject=view}}

关于javascript - 如何将 Action 从 Ember 组件发送到包装它的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005045/

相关文章:

javascript - 为什么 funcname() = value;有效的语法?

c# - 模拟仅在指定用户时有效

PHP MVC : Where to Put Dynamically Generated Javascript

php - 在 PHP 中设计服务层类

ember.js - 在使用浏览器返回时使用 transition.abort() 时 URL 得到更新

javascript - Ember 根据参数名称返回未定义的 url 参数

javascript - 如何对网页中的样式更改使用react?

javascript - 使用 jquery 添加空 div 到图像

ember.js - ember-cli 0.0.47 升级后违反内容安全策略指令

javascript - 使用 += 赋值在 javascript 中给出 NaN