使用Ember组件'的方法
Using Ember component's methods inside template
我刚刚开始学习Ember,有一件事我很困惑,如果我能访问模板中组件的方法。
例如,我有一个note-list
组件,它将note-line
的列表呈现如下:
<ul class="list">
{{#each notes as |note|}}
{{note-line note=note index=@index selected=(isSelected note)}}
{{/each}}
</ul>
note-list
组件定义为:
Ember.Component.extend({
tagName: '',
isSelected(note) {
return note.id === this.get('selectedNote').id
}
})
但是我得到了错误Assertion Failed: A helper named 'isSelected' could not be found
。
我想我可以用助手来解决这个问题,但为特定组件的行为创建一个单独的助手似乎不是一个好的解决方案。
请帮忙给我一些更好的处理方法。
非常感谢。
在您的情况下,您的组件可以自行决定是否选择它。实际上,您有一个函数isSelected
,无论注释行是否被选中,它都会返回一个布尔值。
您必须考虑使用计算属性来实现这一点。
note-line
组件的定义如下:
Ember.Component.extend({
tagName: '',
note: null,
isSelected: Ember.computed('note', function() {
return this.get('note.id') === this.get('selectedNote.id')
})
})
然后,在组件模板中,isSelected
作为一个简单的组件变量可用,并在更新note
时进行更新。
最后,您可以简单地使用这样的组件:
<ul class="list">
{{#each notes as |note|}}
{{note-line note=note index=@index}}
{{/each}}
</ul>
但在这种情况下,正如您在评论中指出的,您需要将selectedNote
传递给每个组件,以便它们更新isSelected
属性。
这样做的一种方法是在模型本身中有一个isSelected属性,如本文所述。在route
中的model
函数中,您只需要像这样设置此属性:
model: function() {
return this.store.find('notes')
.then(function(notes) {
notes.forEach(function(note) {
note.set('isSelected') = true || false; // here will be implemented your function to determine if note is selected or not
});
return notes;
})
})
}
然后,在组件模板中,isSelected
在note
中可用,与任何其他属性一样。
相关文章:
- 有没有一种方法可以列出Ember.Object的所有绑定
- 如何在ember单元测试中模拟_super()方法
- 从全局函数调用Ember控制器上的方法
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- Ember.js-模型find()方法中的异步调用
- 在Ember.js中的方法之间共享变量上下文
- 如何在Ember中转换到另一个路由时调用一个方法
- Ember:使用this.get('controller.').content,find方法
- Ember.js应用程序架构与路由器,如何避免重复的方法
- 如何等到find方法完成后再在Ember模型中进行进一步处理
- Ember数据FixtureAdapter hasmany-无法调用方法'toString'的未定义
- 在ember.js中保存对象时出错:'对象X没有方法'保存''
- 在 ember.js 中定义和使用控制器方法
- 从父级转换时,不会触发 Ember 子路由模型方法
- 未捕获的类型错误:对象 #<对象> 没有方法“重新打开”(Ember.js)
- Ember.js - 在车把内初始化的视图中调用方法
- (Ember.run.throttle)Object Function在Ember.Mixin中没有方法“throttl
- Ember 应用程序就绪状态 - 应用程序无法识别方法
- 如何在 Ember-CLI 中单元测试类方法
- 侦听 Ember 组件外部的点击的正确方法是什么?