- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试创建一个下拉菜单组件。它包含 2 个组件 - currency-dropdown (parent)
, dropdown-item (child)
。我能够渲染组件。但是当我点击 dropdown-item
组件时,我无法触发对父组件的操作。
我正在尝试将选定的组件数据发送到父组件。我尝试设置 targetObject 和我在这里找到的许多其他组合。我不确定是什么问题。我确实在父组件中扩展了 _yield
,因为我在 each 助手中渲染子组件。一些帮助将不胜感激。 Here is what I've got so far.
App.CurrencyDropdownComponent = Ember.Component.extend({
actions: {
itemSelected: function(item) {
console.log(item);
}
},
_yield: function(content, options) {
var get = Ember.get,
view = options.data.view,
parentView = this._parentView,
template = get(this, 'template');
if (template) {
view.appendChild(Ember.View, {
isVirtual: true,
tagName: '',
_contextView: parentView,
template: template,
context: get(view, 'content'),
controller: get(parentView, 'controller'),
templateData: { keywords: parentView.cloneKeywords() }
});
}
}
});
App.DropdownItemComponent = Ember.Component.extend({
click: function() {
this.sendAction('selectItem', this.origContext);
}
});
<script type="text/x-handlebars" id="index">
<header>
{{#currency-dropdown currencies=model}}
{{#dropdown-item targetObject=view selectItem="itemSelected"}}
<span class="cdd-selected-tick">✔</span>
<span class="font-13">{{name}}</span>
<span class="push-right font-11">{{symbol}}</span>
{{/dropdown-item}}
{{/currency-dropdown}}
</header>
</script>
<script type="text/x-handlebars" id="components/currency-dropdown">
<div class="cdd-box">
<input class="cdd-input" type="hidden"/>
<div class="cdd-selected-box" {{action "toggleDropDown"}}>
<strong>Currency</strong>
<span class="uppercase"> {{currencies.0.currencyCode}} </span>
{{currencies.0.symbol}}
<div class="down-arrow"></div>
</div>
<ul class="cdd-selection-box" >
{{#each item in currencies}}
<li>{{yield}}</li>
{{/each}}
</ul>
</div>
</script>
最佳答案
所以我找到了一种方法来做到这一点,但我认为这可能有点 hack。你的问题是,就上下文而言,你的下拉项不应该访问你的货币下拉列表。通过使用 yield
,您为下拉项提供了与货币下拉菜单相同的上下文,而不是货币下拉菜单本身的上下文。这是一个奇怪的场景,因为你有点想要两全其美,但你只能拥有一个或另一个。因此,您可以这样做,而不是发送操作:
this.get('parentView').send('itemSelected', this.origContext);
这将调用您想要的操作处理程序。只有两个警告:
dropdown-item
组件可能无法重复使用。dropdown-item
组件总是会调用操作,而不仅仅是在父组件订阅它时。此外,我不知道您的整个用例,但我认为您可能正在尝试使该组件也可重用。我个人根本不会使用 yield
,而是将下拉项的 HTML 硬编码到下拉组件类中。对您的应用程序特定的某些内容进行硬编码会降低其在应用程序外部的可重用性,但会使其在应用程序内部更容易使用(这显然更重要)。在使用解决方法之前,您可能需要重新审视一下您是如何使用这些组件的。从长远来看,像这样的变通办法总是会反咬我一口。
关于javascript - EmberJS 触发子组件对父组件的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27074462/
随着从 SproutCore 2.0 到 EmberJS 的迁移,有命名空间和 Github 存储库迁移。核心的东西好像移到了http://github.com/emberjs组织 Github 帐户
我有一条使用 ArrayController 来显示对象的路线。在执行某些操作后,使用 controller.clear() 和 controller.addObjects() 方法再次填充数组。我需
我有一个在 Ember 中创建的自定义 View 。我真的很喜欢 {{yield}} helper 让我控制三明治的“面包”。但是,我现在想要做的是创建一个“双层”三明治,并有一个超过 1 个产量的
过去 6 个月我正在开发一个 Emberjs 组件。 当我尝试开发表格组件时,我开始遇到第一个性能问题。此表中的每个单元格都是 Ember.View,并且每个单元格都绑定(bind)到对象属性。当表格
我有一个名为 docTemplateID 的变量/操作。docTemplateID 的值可以是 1 或 2单击按钮 1 设置 docTemplateID = 1。单击“提交”按钮将使用新值创建 doc
我正在尝试编写一个小 Action 来搜索数据存储,顺便说一下,数据存储中已经加载了数据。我希望能够通过字符串(即名字)进行搜索。 这是我到目前为止的代码示例。 this.get() 正在从搜索表单中
我正在尝试在注册表单上创建提交操作。这是我的寄存器 handle : {{input class="form-control" value=username type="text" pl
我有一个我认为相当正常的 JSON 响应: "data": { ..... "user": { "name": "John", "surname": "Doe" } .
如何定义仅在按下特定修饰键时调用的操作(单击时)? allowedKeys当没有按下修饰键时也会执行该操作。 最佳答案 一种方法就是做 my item 在你的 Controller /父组件中
所以,这基本上就是我想要的。但我需要获取可以在 ember 检查器中看到的当前路径,但如何在组件中获取它?或者有更好的方法来做到这一点吗?也许是一项服务? import Ember from 'emb
我只是想循环遍历我生成的一些虚拟数据,这样我就可以设置网站的样式,我的路由器中有这个: import Ember from 'ember'; export default Ember.Route.ex
这就是我所拥有的。 2 种模型:“注释”和“用户”。注释有一个名为“用户”的字段,它使“1 个用户对应多个注释”进行复制。数据取自 Mirage。 备注型号: export default DS.Mo
我尝试复制搜索字段,就像它们在 emberjs.com 处显示的那样。但是由于某种原因,当输入查询并按 Enter 或单击提交按钮时,我的代码不断产生以下错误(在 google chrome 中):
我正在测试过滤器内容,仅显示 X 个结果,我必须使用计数器来执行此操作,因为适配器如何返回数据。 http://jsfiddle.net/eAvET/ 当您加载此修改后的示例时,显示 0 数据,但是当
我的应用程序有一个名为 Balance 的模型,我们可以在其中添加金额和说明。我创建了一个操作,当您单击按钮时添加一些余额记录,到目前为止效果很好。问题是我创建了一个名为“totalBalance”的
我正在使用 ember 的查询参数按布局类型过滤结果列表。我想检查指定的查询是否在 availableLayouts 中。我知道我可以检查该值是否在此数组中,但我不确定 ember 在什么时候设置“布
我有一段数据(对象),它从服务器端脚本打印为全局变量。 user = { id : 1, name: 'foo', avatar : 'http://foo.com/avatar.jpg'} 整个应用
我正在使用 Ember 构建一个单页音乐网络应用程序。每个轨道在页面上都表示为一个组件。给定页面上有许多轨道。当用户单击播放时,组件会更新其 UI 以反射(reflect)这一点,并且主路由会跟踪当前
我想将社交分享按钮(fb、twitter、vk)添加到我的 Ember 应用程序中。我找到了一些库并集成了它们,但它们有一个重要的限制。社交网络使用其机器人抓取共享页面,并从页面中检索特定的元属性。但
我试图用easyForm预选一个选择框。 https://github.com/dockyard/ember-easyForm 我做了一个JsBin:http://emberjs.jsbin.com/
我是一名优秀的程序员,十分优秀!