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'。 现在点击在该表单中定义的“保存按钮”直接转到父路线,即PostCommentsRoute,而不是转到自己的路线,可能是因为我通过渲染助手显示表单。
我认为在尝试将层次结构冒泡到PostComments路线之前,调用'save'应该转到它自己的控制器,然后冒泡到它自己实际定义的路径。
答案 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
的所有逻辑都在控制器中进行新注释,这是有道理的,因为新注释不再有自己的路由来初始化这个数据。