2015-10-13 99 views
0

我在Ember.js应用程序和一些不起作用的sendAction中遇到了一些问题。 基本上,我有: - 一个输入组件(触发动作的一个组件) - 一个控制器/模板(包含组件的渲染) - 一个其他控制器/模板,其中我们呈现前一个控制器。Ember.js:未由组件的'sendAction'触发的控制器操作

这是代码。

首先,文本字段组件:

Tm.JiraCloudInputComponent = Ember.TextField.extend({ 
    keyDown: function (event) { 
    if (event.keyCode === 27) { 
     this.sendAction('cancelJiraCloudUrl'); 
    } 

    if (event.keyCode === 13) { 
     event.preventDefault(); 
     this.sendAction('saveJiraCloudUrl'); 
    } 
    }, 

    blur: function() { 
    this.sendAction('saveJiraCloudUrl'); 
    } 
}) 

具有动作控制器:

Tm.JiraCloudController = Ember.Controller.extend({ 
    jiraCloudEnabled: Ember.computed.oneWay('content.jiraCloudEnabled'), 
    jiraCloudUrl: Ember.computed.oneWay('content.jiraCloudUrl'), 
    successMessage: '', 
    errorMessage: '', 

    actions: { 
    saveJiraCloudUrl: function() { 
     if (Tm.isEmpty(this.get('jiraCloudUrl'))) { 
     this.unlinkJiraCloud(); 
     } else { 
     this.linkJiraCloud(); 
     } 
    }, 

    cancelJiraCloudUrl: function() { 
     this.set('jiraCloudUrl', this.get('model.jiraCloudUrl')); 
     this.set('jiraCloudEnabled', this.get('model.jiraCloudEnabled')); 
     this.clearMessages(); 
    } 
    } 
}); 

及其关联的模板:

{{#default-box id="jira-cloud-settings" class="box-full-width"}} 
    {{box-header title="settings.jira_cloud"}} 
    {{#box-content}} 
    {{jira-cloud-input class="form-control" value=jiraCloudUrl placeholder="Jira cloud url"}} 
    <button type="button" class="btn btn-default" title="Link Jira cloud" {{action "saveJiraCloudUrl"}}>Link Jira cloud</button> 
    {{/box-content}} 
{{/default-box}} 

注:框(默认盒子,盒子内容)也是组件。

而在去年,我们在其中呈现前一个控制器模板:

{{render "jiraCloud" content}} 

我无法找到任何显而易见的,为什么它不工作。 'sendAction'调用没有提出任何错误。 请注意,按钮上的动作就像魅力一样。

感谢您的帮助, 文森特

+0

注:我想只是删除箱组件万一没有效果... – Vincent

回答

1

嗯,我刚刚其实愚蠢。我太习惯于旧的“送”,让我忘了做渲染组件时的映射:

{{jira-cloud-input save="saveJiraCloudUrl" esc="cancelJiraCloudUrl" class="form-control" value=jiraCloudUrl placeholder="Jira cloud url"}} 

并在代码:

Tm.JiraCloudInputComponent = Ember.TextField.extend({ 
    keyDown: function (event) { 
    if (event.keyCode === 27) { 
     this.sendAction('esc'); 
    } 

    if (event.keyCode === 13) { 
     this.sendAction('save'); 
     event.preventDefault(); 
    } 
    }, 

    blur: function() { 
    this.sendAction('save'); 
    } 
})