Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用余烬组件';模板内的s方法_Javascript_Ember.js - Fatal编程技术网

Javascript 使用余烬组件';模板内的s方法

Javascript 使用余烬组件';模板内的s方法,javascript,ember.js,Javascript,Ember.js,我刚刚开始学习Ember,有一件事我很困惑,如果我能在模板中访问组件的方法 例如,我有一个注释列表组件,它呈现注释行的列表,如下所示: <ul class="list"> {{#each notes as |note|}} {{note-line note=note index=@index selected=(isSelected note)}} {{/each}} </ul> 但是我得到错误断言失败:找不到名为“isSelected”的帮助程序 我想

我刚刚开始学习Ember,有一件事我很困惑,如果我能在模板中访问组件的方法

例如,我有一个
注释列表
组件,它呈现
注释行的列表
,如下所示:

<ul class="list">
  {{#each notes as |note|}}
    {{note-line note=note index=@index selected=(isSelected note)}}
  {{/each}}
</ul>
但是我得到错误
断言失败:找不到名为“isSelected”的帮助程序

我想我可以用helpers解决这个问题,但是为特定组件的行为创建一个单独的helper似乎不是一个好的解决方案

请帮我建议一些更好的处理方法


非常感谢。

在您的情况下,您的组件可以自行决定是否选中它。实际上,您有一个函数
isSelected
,它返回一个布尔值,无论注释行是否被选中

您必须考虑使用计算属性来实现这一点。

注释行
组件的定义如下:

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>
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
中可用。

在您的情况下,您的组件可以自行确定是否选中它。实际上,您有一个函数
isSelected
,它返回一个布尔值,无论注释行是否被选中

您必须考虑使用计算属性来实现这一点。

注释行
组件的定义如下:

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>
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
中可用。

谢谢您的回答,但在这种情况下,我似乎需要将所选注释传递到
注释行
,即
{note line note=note index=@index selectedNote=selectedNote}
我想知道是否还有其他方法可以在不传递所选便笺的情况下完成此操作,因为
便笺行实际上只关心它显示的便笺以及是否选择了此便笺。我更了解您想要什么。请查看我的更新答案。感谢您的回答,但在这种情况下,我似乎需要将所选便笺传递到
便笺行
,即
{{note line note=note index=@index selectedNote=selectedNote}}
我想知道是否有其他方法不传递所选便笺,因为
注释行
实际上只关心它显示的注释以及是否选择了此注释。我更了解您想要什么。请看我的更新答案。你能添加与notes相关的路由器部分吗?有一种方法可以通过指向
帮助程序的
链接和自定义的
activeClass
,让ember处理它,而不是在模型上循环并在每个记录上设置属性。您可以添加与notes相关的路由器部分吗?有一种方法可以通过指向
帮助程序的
链接和自定义的
activeClass
来实现,这样您就可以让ember处理它,而不是在模型上循环并在每个记录上设置属性。