emberjs-RC2渲染助手范围和动作冒泡不允许表单保存

时间:2013-04-22 13:08:35

标签: ember.js ember-router

jsfiddle

从帖子#index模板,我可以使用#linkTo帮助器创建一个新的注释,该帮助器转到PostNewComment路由并呈现post / newcomment表单。如果单击“保存”,则使用PostNewComment路径中的“保存事件”保留新创建的注释。

您可以在“帖子/评论”模板中取消注释以下这一行,看它是否有效      

{{#linkTo“post.newComment”}}添加评论{{/ linkTo}}

我更改了我的UI以使用控制器isAddingNew按钮和渲染帮助器来确定何时显示表单,现在如果我单击保存按钮,我得到:

Uncaught TypeError: Cannot call method 'one' of null

我如何呈现它:

<p> {{render "post.newComment" }} </p>

我怀疑这是一个范围问题,因为只有在使用渲染帮助器后单击“保存”时才会触发错误。

要访问“添加新评论”按钮:

   click  -> post -> a post title -> click comments link -> add comment

有没有办法通过帖子/评论模板中的'渲染帮助器'显示'Post / newComment表单',以使用PostNewComment Route中定义的'save event'。 现在点击在该表单中定义的“保存按钮”直接转到父路线,即PostCommentsRou​​te,而不是转到自己的路线,可能是因为我通过渲染助手显示表单。

我认为在尝试将层次结构冒泡到PostComments路线之前,调用'save'应该转到它自己的控制器,然后冒泡到它自己实际定义的路径。

1 个答案:

答案 0 :(得分:2)

可能有一些替代品,但这很有效,而且非常惯用:http://jsfiddle.net/GabSY/4/

特别是:

{{#if model}}
     <form {{action save content on='submit'}}> 
    {{view Ember.TextArea valueBinding="content.body" placeholder="body"}}
    <button type="submit"> save comment </button> 
     <button {{action cancel}}> Cancel</button>
    </form>
{{else}}
    <button  {{action open}}> Add comment </button>
{{/if}}

您收到Uncaught TypeError: Cannot call method 'one' of null错误的原因是PostNewCommentController的模型从未设置过。我最后做的是使用open上的PostNewCommentController操作设置控制器的model,可以在Handlebars {{if}}中使用它来确定表单是否正确应该显示与否。

我更喜欢这种方法来替代content model PostNewCommentController内的PostCommentsRoute / setupController(它们是彼此的别名) 1}}方法,因为如果沿着那条路走下去,就很容易开始在非常相关的控制器和路由之间混合关注点。在我的方法中,用于设置新注释的content / model的所有逻辑都在控制器中进行新注释,这是有道理的,因为新注释不再有自己的路由来初始化这个数据。