0

jsfiddle。_

在 posts#index 模板中,我可以使用 #linkTo 助手创建新评论,该助手转到 PostNewComment 路由并呈现 post/newcomment 表单。如果我单击保存,则使用 PostNewComment 路由中的“保存事件”保留新创建的评论。

您可以在 post/comments" 模板中取消注释下面的行,以查看它是否正常工作

{{#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

有没有办法通过帖子/评论模板中的“渲染助手”显示“发布/新评论表单”,以使用 PostNewComment 路由中定义的“保存事件”。现在单击该表单中定义的“保存按钮”会直接转到父路由,即 PostCommentsRou​​te,而不是转到自己的路由,这可能是因为我通过渲染助手显示了表单。

我认为调用“保存”应该转到它自己的控制器,然后冒泡到它自己实际定义的路由,然后再尝试将层次结构冒泡到 PostComments 路由。

4

1 回答 1

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}}来确定是否应该显示表单。

我更喜欢这种方法,而不是在's方法中设置content/ model(它们是彼此的别名),因为如果你沿着这条路线走,很容易开始在不太相关的控制器和路线之间混合关注点。在我的方法中,设置新评论/的所有逻辑都发生在新评论的控制器中,这是有道理的,因为新评论不再有自己的路由来初始化这些数据。PostNewCommentControllerPostCommentsRoutesetupControllercontentmodel

于 2013-04-22T17:17:26.313 回答