将bs-form中的bs按钮连接到组件操作(ember-bootstrap)

时间:2017-07-17 10:44:19

标签: twitter-bootstrap ember.js ember-bootstrap

bs-button内的bs-form连接到组件操作的正确方法是什么?

关于我想做什么和已经尝试过的一些背景知识:

我正在将Ember从2​​.10升级到2.14并将ember-bootstrap从0.11.3升级到1.0。我遇到了ember-bootstrap的问题。

表格中有两个按钮(bs-form):"保存"和"取消"。 表单托管在Ember组件中。在旧版本中,我只有两个bs-button元素,如下所示:

{{bs-button defaultText="Save" type="primary" action="save"}}
{{bs-button defaultText="Cancel" type="primary" action="cancel"}}

在组件类中,我定义了匹配操作:

actions: {
  save() { /* do saving stuff */ }
  cancel() { /* do cancelling stuff */ }
}

现在这已不再适用:bs-button现在使用onClick代替action,但只添加onClick="save"不起作用(我得到TypeError: action is not a function);此外,onClick=(action "save")不起作用(Assertion Failed: An action named 'save' was not found in (generated edit-organization controller))。

但是,如果不使用bs-button而使用普通button元素并结合action帮助程序,则可以正常使用:

<button class="btn btn-default" {{action 'cancel'}}>Cancel</button>
<button class="btn btn-primary" {{action 'save'}}>Save</button>

我怀疑问题与使用组件来托管表单有关;毕竟,ember-bootstrap文档声明操作习惯于...

  

向您的控制器发送操作。

我仍然想使用一个组件(毕竟,控制器正在消失,对吧?)。对此有任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以创建闭包动作并将其传递给bs-button组件。

{{bs-button defaultText="Save" type="primary" save=(action "save")}}
{{bs-button defaultText="Cancel" type="primary" cancel=(action "cancel")}}

在组件内部,

<button class="btn btn-default" {{action cancel}}>Cancel</button>
<button class="btn btn-primary" {{action save}}>Save</button>