我试图在Ember {{#each}}
标记完成其项目循环后调用一些代码。我看到其他看似相似的问题,答案总是在视图上实现didInsertElement
。这似乎不适合我,因为我试图访问未使用视图呈现的html对象,因为它们位于{{#each}}
。
这是我的html的样子。
<script type="text/x-handlebars" id="user">
{{#if isEditing}}
<div class="well">
{{partial 'user/edit'}}
<button {{action 'doneEditing'}} class="btn btn-default">Save</button>
<button {{action 'cancelEditing'}} class="btn btn-default">Cancel</button>
</div>
{{else}}
<button {{action 'edit'}} class="btn btn-default">Edit</button>
{{/if}}
</script>
<script type="text/x-handlebars" id="user/edit">
{{#view 'editor'}}
<div id="sList" class="btn-group-vertical" role="group">
{{#each s in model}}
<button class="btn btn-default">
{{s.theme}}
</button>
{{/each}}
</div>
{{/view}}
</script>
我的javascript
App.UserRoute = Ember.Route.extend({
model: function(params) {
return this.store.all('strength')
}
});
App.UserController = Ember.ObjectController.extend({
isEditing: false,
actions: {
edit: function(){
this.set("isEditing", true);
},
doneEditing: function(){
this.set("isEditing", false);
},
cancelEditing: function(){
this.set("isEditing", false);
}
}
});
App.EditorView = Ember.View.extend({
didInsertElement: function() {
//Do something to the button elements
}
});
当我尝试运行它时,只要我点击编辑按钮和部分加载,我在didInsertElement
尝试访问按钮元素后在控制台中出现错误。就好像div中的元素还没有渲染一样。那么如何判断{{#each}}
是否完成了将元素插入到html中?我知道这可能会让人感到困惑,但是感谢任何帮助。
答案 0 :(得分:0)
在afterRender队列中安排代码,以便在呈现视图内容后运行。
App.EditorView = Ember.View.extend({
didInsertElement: function() {
Ember.run.schedule('afterRender', function() {
this.$().find('button').each(function() {
// $(this) is a button in this function
});
}.bind(this));
}
});